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