孤立スコープは、一般的にのみテンプレートと便利です、彼らはあなたのディレクティブを解釈する属性をする方法を宣言するための方法として使用すべきではありません。これは、テンプレートを持たないほとんどのディレクティブが、通常、子スコープまたは環境の直接スコープのセマンティクスを必要とするためです。
オブジェクト参照は双方向データバインディングを有効にするものなので、おそらく$ watchは必要ありませんが、あなたの完全なコードはわかりません。場合
を使用すると、1つの普通の孤立スコープセマンティクスへの翻訳を知りたい:
@name -> attrs.name
=name -> $scope.$eval(attrs.name);
&name -> function() { return $scope.$eval(attrs.name); }
EDIT 2:あなたのコメントの後
を、私はこのplunkerを思い付きました。双方向データバインディングを保持するには、 "。"を使用する必要があります。あなたのNGモデル宣言で。これは、双方向データバインディングが値型に対して機能しないのは、それらが不変なためです。たとえば、100という値を変更することはできません。参照型オブジェクトを渡して、変更している値をハングアップする必要があります。分離されたスコープ定義の値への完全なパスを指定することは、双方向のデータバインディングが可能になるという原則に基づいては不可能です。
Javascriptを:
angular.module('plunker', [])
.directive('twoWay', function() {
return {
restrict: 'E',
template: '<div><input ng-model="thing.name" type="text" /></div>',
scope: {
thing: "="
},
link: function(scope, element, attrs) {
}
};
})
.controller('MainCtrl', function($scope) {
$scope.data = {
name: "World"
};
});
HTML:
<body ng-controller="MainCtrl">
<p>Hello {{data.name}}!</p>
<two-way thing="data"></two-way>
</body>
ディレクティブには、入力要素を持つテンプレートがあります。 <入力ng-model = "myObject.data" ...>。この入力要素のモデルがドット付き表記法を使用している場合、親スコープとの双方向バインディングをどのように作成しますか。私は、ディレクティブにスコープを分離する必要があります。 – Warren
@ user1273184私の編集後、それはあなたの質問に答えますか? – mortalapeman
@ user1273184あなたのコメントは隔離範囲が必要な理由を説明していません。質問にあなたのアプローチの背後にあるテンプレートと推論を置くべきです。 – zeroflagL