ngModel を必要とし、ngModel のパーサーとフォーマッター関数を追加する、入力要素に適用される構成可能なディレクティブを作成しようとしています。
私が抱えている問題は、ngModel バインディングを同時にサポートしながら、補間された値をディレクティブに渡すことができないように見えることです。たとえば、次の 2 つの方法のいずれかでディレクティブを使用できるようにしたいと考えています。
リテラル引数を渡す:
<input ng-model="foo" my-directive="120" />
または現在のスコープから補間された引数を渡します。
<input ng-model="foo" my-directive="{{bar}}" />
...
function MyCtrl($scope) {
$scope.bar = "120";
}
ディレクティブ定義でリンク関数の属性引数を読み取ると、1 回目の使用では attributes.myDirective の値を取得できますが、2 回目の使用では myDirective の値は未定義です。
ここで、分離スコープをディレクティブ定義に追加すると、次のようになります。
scope: { myDirective: '@' }
次に、上記のシナリオで scope.myDirective が定義および補間されますが、ngModel が壊れています。私のパーサー/フォーマッター関数は、入力引数に対して未定義で渡されます。何が起こっているのか、どうすれば私が望む動作を実装できますか?
指令:
module.directive('myDirective', function () {
return {
restrict: 'A',
require: 'ngModel',
replace: false,
link: function (scope, elm, attrs, ctrl) { // attrs.myDirective not interpolated