一尘不染

在观看AngularJS中的模型更改时如何忽略初始负载?

angularjs

我有一个网页可以用作单个实体的编辑器,它位于$ scope.fieldcontainer属性中的深层图形中。从REST API获得响应(通过$
resource)后,将手表添加到“
fieldcontainer”。我正在使用此手表来检测页面/实体是否为“脏”。现在,我正在使“保存”按钮弹跳,但实际上我想使“保存”按钮不可见,直到用户弄脏模型为止。

我得到的只是手表的一个触发器,我认为这是发生的,因为.fieldcontainer = …分配是在创建手表后立即进行的。我本来只是想使用“
dirtyCount”属性来吸收最初的错误警报,但是感觉很hacky……而且我认为必须采用一种“ Angular惯用的”方式来解决此问题-
我不是唯一的人用手表检测脏模型。

这是我设置手表的代码:

 $scope.fieldcontainer = Message.get({id: $scope.entityId },
            function(message,headers) {
                $scope.$watch('fieldcontainer',
                    function() {
                        console.log("model is dirty.");
                        if ($scope.visibility.saveButton) {
                            $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
                        }
                    }, true);
            });

我一直在想,有一种比使用“ if(dirtyCount> 0)”保护我的“ UI污染”代码更干净的方法了……


阅读 186

收藏
2020-07-04

共1个答案

一尘不染

在初始加载之前设置一个标志,

var initializing = true

然后当第一个$ watch触发时,

$scope.$watch('fieldcontainer', function() {
  if (initializing) {
    $timeout(function() { initializing = false; });
  } else {
    // do whatever you were going to do
  }
});

该标志将在当前摘要周期结束时被删除,因此不会阻止下一个更改。

2020-07-04