加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如果使用$dirty和$pristine对表单进行任何更改,则

发布时间:2020-12-17 17:57:52 所属栏目:安全 来源:网络整理
导读:我试图在我的应用程序上停止导航,如果任何表单进行了更改并尝试导航而不保存更改. 我想显示一个对话框,显示是保存导航或放弃还是取消导航操作. 我正在使用角度ui.routing app.config(function($stateProvider,$urlRouterProvider) { $urlRouterProvider.othe
我试图在我的应用程序上停止导航,如果任何表单进行了更改并尝试导航而不保存更改.

我想显示一个对话框,显示是保存导航或放弃还是取消导航操作.

我正在使用角度ui.routing

app.config(function($stateProvider,$urlRouterProvider) {
    $urlRouterProvider.otherwise('/dashboard');

    $stateProvider
        .state('dashboard',{
            url: '/dashboard',templateUrl: '/application/private/views/dashboard.html'
        })
        .state('websites',{
            url: '/websites',templateUrl: '/application/private/views/websites.html'
        })
});

我计划实现类似于使用angularjs服务单例的实现

app.service('dirtyCheckService',function ($rootScope,dialogService){


});

在控制器级别,我可以像这样写一个提交点击

app.controller('formSubmitCtrl',function ($scope,dirtyCheckService){
dirtyCheckService.checkForm($scope).then(function(){
   //allow navigation
   },function(){
   //not allowed}
});

我不确定是否存在简单的方法

谢谢

解决方法

答案是:可以将这种支票转移到服务/工厂 – 以便进一步重复使用.另外,这里有一些例子,至少要说明如何 – plunker

一个工厂:

.factory('CheckStateChangeService',function($rootScope){

  var addCheck = function($scope){ 

    var removeListener = $rootScope.$on('$stateChangeStart',function (event,toState,toParams,fromState,fromParams) {

          if($scope.form.$pristine)
          {
            return;
          }

          var shouldContinue = confirm("The form has changed" +
                 ",do you want to continue without saving");
          if(shouldContinue)
          {
            return;
          }
          event.preventDefault();
    }); 

    $scope.$on("$destroy",removeListener);
  };

  return { checkFormOnStateChange : addCheck };
})

并有这样的观点:

<div>
    <form name="form">

      <dl>
        <dt>Name</dt>
        <dd><input type="text" ng-model="person.Name" />
        <dt>Age</dt>
        <dd><input type="number" ng-model="person.Age" />
      </dl>

    </form>
</div>

和控制器:

.controller('MyCtrl',function($scope,CheckStateChangeService) {

  $scope.person = { Name: "name",Age: 18 };

  CheckStateChangeService.checkFormOnStateChange($scope);

})

有一个example

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读