2
我试图生成嵌入编辑器(表单)的指令。外部控制器可以很容易地将“要编辑的东西”推入内部指令,但我希望外部控制器知道表单何时脏。我总体的模板(简体):访问指令模板中的表单状态的“角度”方法是什么?
<div ng-controller="outer">
<account-editor account-id="currentID" dirty-flag="isDirty"></account-editor>
</div>
我想这个指令“外”控制器上进行更新isDirty标志:
directive('accountEditor',[ 'account', function(account) {
return {
restrict: 'E',
scope: {
accountId: '=',
dirtyFlag: '='
},
link: function($scope, element, attr, ctrl) {
$scope.$watch('accountId', function() {
$scope.accountToEdit = account.getAccount($scope.accountId);
});
// I WANT TO WATCH THE FORM STATE, AND UPDATE dirtyFlag
},
template: '<form><input ng-model="accountToEdit.name"/></form>'
};
}]);
我应该写一个额外的指令,穿上<形式>,使用事件,在链接期间直接访问DOM,还是其他?
我的完整代码是http://jsbin.com/amuduro/1/edit,但它包含更多的功能。
玩这个有点。这是一个非常重要的概念。不要在范围中使用**原语**来传递子范围。传递对象,所以原始对象的引用可以通过所有的后代作用域来使用....'$ scope.model = {idx:0,isDirty:false}'...将'model'传递到指令作用域,然后'model.isDirty = true'从子范围将注册参考对象上树 – charlietfl
你能解释为什么这个声明:“不要在范围中使用原语向下传递子范围。”我已经阅读过,但我不清楚为什么这是一个问题。 – Darryl
ok ....'var a = {},b = a' ...'b'不是'a'的副本,它是一个参考。任何改变都会影响另一个(它们是同一个对象)'var x =“foo”,y = x' ......原语'y'是'x'的副本,改变不会影响另一个。因此,当您在嵌套范围内深入层层时...更新5层深对象将更新所有引用备份树(同一对象)。更新原语是在儿童范围内的死胡同 – charlietfl