Javascript 角度ui旋转器$state.go不更改状态?
我有一个我创建的工厂,它将检查是否发生状态更改以及表单是否脏。如果表单变脏,将显示类似于确认窗口的模式。我的问题是,Javascript 角度ui旋转器$state.go不更改状态?,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我有一个我创建的工厂,它将检查是否发生状态更改以及表单是否脏。如果表单变脏,将显示类似于确认窗口的模式。我的问题是,$state.go()不起作用。我不知道为什么: (function() { var checkStateChangeService = function ($rootScope, $modal) { var addCheck = function ($scope, form, $state) { var modalInstan
$state.go()
不起作用。我不知道为什么:
(function() {
var checkStateChangeService = function ($rootScope, $modal) {
var addCheck = function ($scope, form, $state) {
var modalInstanceCtrl = function ($scope, $modalInstance) {
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss("cancel");
};
};
var removeListener = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (form.$pristine) {
return;
}
event.preventDefault();
var message = "There are unsaved changes, do you want to continue?";
var title = "Unsaved Changes";
var modalHtml = "<div class=\"panel\">\r\n";
modalHtml += "<h4 class=\"center\" id=\"modalTitle\">" + title + "<\/h4>\r\n";
modalHtml += "<div class=\"small-12 columns\">\r\n";
modalHtml += "<div class=\"modal-body\">" + message + "<\/div>";
modalHtml += "<div class=\"button-box\">\r\n";
modalHtml += "<button ng-click='ok()' class=\"tiny\">OK<\/button>\r\n";
modalHtml += "<button ng-click='cancel()' class=\"tiny\">Cancel<\/button>\r\n";
modalHtml += "<\/div>\r\n";
modalHtml += "<\/div>\r\n";
modalHtml += "<\/div>";
var modalInstance = $modal.open({
template: modalHtml,
controller: modalInstanceCtrl
});
modalInstance.result.then(function () {
$state.go(toState);
}, function () {
$state.go(fromState);
});
});
$scope.$on("$destroy", removeListener);
};
return { checkFormOnStateChange: addCheck};
}
var module = angular.module("traApp");
module.service("checkStateChangeService", checkStateChangeService);
}());
(函数(){
var checkStateChangeService=函数($rootScope,$modal){
var addCheck=函数($scope,form,$state){
var modalInstanceCtrl=函数($scope,$modalInstance){
$scope.ok=函数(){
$modalInstance.close();
};
$scope.cancel=函数(){
$modalInstance.解散(“取消”);
};
};
var removeListener=$rootScope.$on(“$stateChangeStart”,函数(事件、toState、toParams、fromState、fromParams){
if(表格$pristine){
返回;
}
event.preventDefault();
var message=“有未保存的更改,是否继续?”;
var title=“未保存的更改”;
var modalHtml=“\r\n”;
modalHtml+=“”+title+“\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“”+消息+“”;
modalHtml+=“\r\n”;
modalHtml+=“确定\r\n”;
modalHtml+=“取消\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“”;
var modalInstance=$modal.open({
模板:modalHtml,
控制器:modalInstanceCtrl
});
modalInstance.result.then(函数(){
$state.go(toState);
},函数(){
$state.go(fromState);
});
});
$scope.$on(“$destroy”,removeListener);
};
返回{checkFormOnStateChange:addCheck};
}
var模块=角度模块(“traApp”);
服务模块(“checkStateChangeService”,checkStateChangeService);
}());
我没有看到任何错误,也不知道为什么这是一个问题。我见过几个与我非常相似的例子 我找到了帮助我解决这个问题的方法。我看到的唯一一个小问题是模式在状态改变后关闭。看起来有点奇怪,但它很管用,事实上,这让我想到了,因为看起来国家似乎没有改变
(function() {
var checkStateChangeService = function ($rootScope, $modal) {
var addCheck = function ($scope, form, $state) {
var _this = this;
var modalInstanceCtrl = function ($scope, $modalInstance) {
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss("cancel");
};
};
var removeListener = function (event, toState, toParams, fromState, fromParams) {
if (form.$pristine) {
return;
}
_this.toState = toState;
_this.toParams = toParams;
var message = "There are unsaved changes, do you want to continue?";
var title = "Unsaved Changes";
var modalHtml = "<div class=\"panel\">\r\n";
modalHtml += "<h4 class=\"center\" id=\"modalTitle\">" + title + "<\/h4>\r\n";
modalHtml += "<div class=\"small-12 columns\">\r\n";
modalHtml += "<div class=\"modal-body\">" + message + "<\/div>";
modalHtml += "<div class=\"button-box\">\r\n";
modalHtml += "<button ng-click='ok()' class=\"tiny\">OK<\/button>\r\n";
modalHtml += "<button ng-click='cancel()' class=\"tiny\">Cancel<\/button>\r\n";
modalHtml += "<\/div>\r\n";
modalHtml += "<\/div>\r\n";
modalHtml += "<\/div>";
var modalInstance = $modal.open({
template: modalHtml,
controller: modalInstanceCtrl
});
modalInstance.result.then(function () {
onRouteChangeOff();
$state.go(_this.toState.name, _this.toParams);
}, function (error) {
});
event.preventDefault();
};
var onRouteChangeOff = $rootScope.$on('$stateChangeStart', removeListener);
};
return { checkFormOnStateChange: addCheck};
}
var module = angular.module("traApp");
module.service("checkStateChangeService", checkStateChangeService);
}());
(函数(){
var checkStateChangeService=函数($rootScope,$modal){
var addCheck=函数($scope,form,$state){
var_this=这个;
var modalInstanceCtrl=函数($scope,$modalInstance){
$scope.ok=函数(){
$modalInstance.close();
};
$scope.cancel=函数(){
$modalInstance.解散(“取消”);
};
};
var removeListener=函数(事件、toState、toParams、fromState、fromParams){
if(表格$pristine){
返回;
}
_this.toState=toState;
_this.toParams=toParams;
var message=“有未保存的更改,是否继续?”;
var title=“未保存的更改”;
var modalHtml=“\r\n”;
modalHtml+=“”+title+“\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“”+消息+“”;
modalHtml+=“\r\n”;
modalHtml+=“确定\r\n”;
modalHtml+=“取消\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“\r\n”;
modalHtml+=“”;
var modalInstance=$modal.open({
模板:modalHtml,
控制器:modalInstanceCtrl
});
modalInstance.result.then(函数(){
onRouteChangeOff();
$state.go(_this.toState.name,_this.toParams);
},函数(错误){
});
event.preventDefault();
};
var onRouteChangeOff=$rootScope.$on(“$stateChangeStart”,removeListener);
};
返回{checkFormOnStateChange:addCheck};
}
var模块=角度模块(“traApp”);
服务模块(“checkStateChangeService”,checkStateChangeService);
}());
$state.go(toState)
似乎实际上只让您保持当前状态。您可以在Plnkr.co上创建示例来显示您的问题吗?@AvijitGupta,不应该。检查toState
对象,名称和url正确无误。此外,我还尝试使用$state.go('some.state'),但这也不起作用。