モデルが汚れたり触れたりしたときに応答する入力要素の周りにディレクティブを構築しようとしています。必要な ngModel は、入力モデルの値とビューの変更を反映しているようですが、他の属性は反映されていません。
ng-model を 2 つの要素に含めているという事実と関係があるのではないかと疑っていますが、一度だけ使用する方法がわかりませんでした。
理想的には、次のように作成されたものが欲しいです。
<input test-directive label="'My Label'" type="text" ng-model="testObject.text"/>
結果は次のようになります。
<label>
<div>My Label</div>
<input ng-model="testObject.text" ng-blur="input.focus=false" ng-focus="input.focus=true"/>
Focused: true (input.focus)
Pristine: false (ngModel.$pristine)
</label>
これが私がこれまでに持っているものです:フィドル
<div test-directive ng-model="testObject.text" l="'Test Input'" f="testObject.focus">
<input type="text" ng-model="testObject.text" ng-blur="testObject.focus=false" ng-focus="testObject.focus=true" />
</div>
ディレクティブは ngModel を監視します。
app.directive('testDirective', ['$compile',
function ($compile) {
'use strict';
return {
restrict: 'A',
require: "ngModel",
scope: {
l: '=',
f: '='
},
link: function (scope, element, attr, ngModel) {
var input = element.find('input');
scope.$watch(function () {
return ngModel;
}, function (modelView) {
scope.modelView = modelView
});
},
template:
'<div>' +
'<label>' +
'{{l}}' +
'<div class="iwc-input" ng-transclude></div>' +
'</label>' +
'focus: {{f}}' +
'<pre>{{modelView|json}}</pre>' +
'</div>',
transclude: true,
replace: false
};
}]);