次のようなさまざまな入力 (後で説明するディレクティブを含む) があります。
<input mask-value="ssn" validate="checkSsn"/>
<input mask-value="pin" validate="checkPin"/>
これらのプロパティはコントローラーにあります。
app.controller("Ctrl", ['$scope', function ($scope) {
$scope.ssn = "";
$scope.pin = "";
$scope.checkSsn = function () { /* validate $scope.ssn */ };
$scope.checkPin = function () { /* validate $scope.pin */ };
}]);
最後に、maskValue
ディレクティブ:
app.directive("maskValue", function () {
return function (scope, element, attrs) {
/* does some focus/blur magic and string replacement */
scope[attrs.maskValue] = this.value;
scope[attrs.validate]();
};
});
これは機能しますが、Angular の誤用のように思えます。代わりに、次のように分離スコープを使用する方が理にかなっています。
scope: {validate: "&"}
次に、scope.validate()
の代わりに使用できますscope[attrs.validate]()
。 ただし、分離されたスコープでは、コントローラーの対応する値を更新できません。特定の値ではなく、親のプロパティを更新しようとするため、使用{maskValue: "="}
は機能しません。maskValue
使用するとうまくいくと思います{ssn: "="}
が、コントローラーの特定のプロパティをディレクティブ属性として設定するのではなく、ディレクティブを柔軟にしないように更新する必要があります。どうやら使用$parent
も推奨されていません。
分離されたスコープ ディレクティブ内のコントローラーのプロパティに動的にアクセスするにはどうすればよいですか?
- 作業コードの例: http://jsfiddle.net/MmyvX/
- 私が達成しようとしていることの試み(動作していません): http://jsfiddle.net/MmyvX/1/
編集:ng-model=ssn
フォーカス/ぼかしイベント中mask-value
に入力の実際の値が変更されるため、入力でなどを使用できません。たとえば、になるかもしれませんが*****####
、実際の値を#########
どこかに保存する必要があり、コントローラーは後で他の理由で使用するため、コントローラーは適切な場所のようです。