【发布时间】:2014-03-16 18:06:57
【问题描述】:
我有一个指令,它有一个模型绑定 2 方式,当通过 ng-click 调用 save() 方法时,父范围不会更新,除非我调用 $scope.$apply() 然后抛出$apply 已经在进行中的错误。
我正在使用 ngResource,事件有一个监听器调用 $scope.model.$save();
有解决办法吗?还是我做错了什么?
.directive('editable', function(){
return {
restrict: 'AE',
templateUrl: '/assets/partials/editable.html',
scope: {
value: '=editable',
field: '@fieldType'
},
controller: function($scope){
...
$scope.save = function(){
$scope.value = $scope.editor.value;
$scope.$emit('saved');
$scope.toggleEditor();
};
}
};
})
更新
看起来它毕竟是在更新父级,但在摘要完成之前发射就被触发了。我可以使用 $timeout 将其强制到堆栈的末尾,但感觉有点笨拙。有没有更好的办法?
$scope.$on('saved', function(){
$timeout(function(){
$scope.contact.$update();
}, 0);
});
【问题讨论】:
-
你能在 jsfiddle 或 plunkr 中显示这个吗?
-
它看起来在这里工作,但这只是隔离范围更新中的值。 jsfiddle.net/Rw46r/1 如果我查看 Batarang,我可以看到父级没有被更新。
-
我不确定这将如何帮助强制更新父范围?正如我所说,当我强制使用 $scope.$apply(); 时,它似乎有效。但这并不理想。
-
如果你通过一个对象然后更新它应该工作的对象的属性。问题是字符串在 javascript 中是不可变的,所以它实际上只是替换本地引用而不是更新值。这是一个更新的小提琴,看看这是否符合您的预期jsfiddle.net/Rw46r/4
-
不幸的是,这不适用于指令试图实现的目标。有点玩,似乎父级实际上正在更新,只是比发出的偶数要慢。
标签: javascript angularjs scope