AngularJS の使用。双方向のデータバインディングを行いたいというディレクティブがあります。ディレクティブには、「activate」という属性があります。初期状態では、「activate」の値は「1」です。
ディレクティブの link 関数は、「activate」が「1」に等しいかどうかをチェックします。その場合、「アクティブ化」を 0 に変更しますが、他のことを行います。
後で、ディレクティブに何かを再度実行させたい場合は、コントローラーで「アクティブ化」を「1」に再度変更します。ディレクティブにはウォッチがあるため、サイクルが繰り返されます。
残念ながら、これを行うたびに、「ディレクティブ 'testDirective' で使用される式 '0' は割り当てられません!」というメッセージが表示されます。または「割り当て不可能なモデル式: 1 (ディレクティブ: testDirective)」。
HTML は次のとおりです。
<body ng-app="app">
<test-directive activate="1"></test-directive>
</body>
JS は次のとおりです。
var app = angular.module('app', []);
app.directive('testDirective', function() {
return {
restrict: 'E',
scope: {
activate : '='
},
link: function( scope, elem, attrs, controller ) {
var el = elem[0];
var updateContent = function() {
el.innerText = 'Activate=' + scope.activate;
};
updateContent();
attrs.$observe( 'activate', function() {
console.log('Activate=' + scope.activate);
if( scope.activate == '1') {
scope.activate = '0'
updateContent();
}
});
}
}
});
ここでは jsFiddle にあります: http://jsfiddle.net/justbn/mgSpY/3/
ディレクティブの属性に格納されている値を変更できないのはなぜですか? 2ウェイバインディングを使用しています。
ドキュメントには、「親スコープ プロパティが存在しない場合、NON_ASSIGNABLE_MODEL_EXPRESSION 例外がスローされる」と記載されています。
注: 更新コンテンツには、「アクティブ化」の値が正しく表示されます。ただし、"" の "activate" の値は更新されません。
ただし、親スコープのプロパティが存在するため、それは私には意味がありません。
何か案は?