我想在输入元素上设置一个属性(在这种情况下模糊),就像AngularJs在元素上设置$ invalid,$ valid等一样。
这是否可以来自指令,如果是,如何?
答案 0 :(得分:0)
元素控制器上的角度集属性,而不是元素本身。
控件(例如input
,select
等)有 NgModelController
,而forms
/ ngForms
有的 FormController
强>
NgModelController
负责通知家长FormController
(如果有)有关$invalid
等属性的更改。
使用NgModelController
(例如input
,select
等)的指令负责确定值何时有效,并调用其NgModelController
的适当方法。
对于像在控制器上设置属性这样简单的事情,您需要一个可以访问控制器实例的指令(通过require
- 并且你很好):
.directive('blurMonitor', function () {
return {
restrict: 'A',
require: 'ngModel', // to get access to the controller
link: function postLink(scope, elem, attrs, ctrl) { // ctrl===NgModelController
/* Initialize the property */
ctrl.$blurred = true;
/* Update the property value on focus */
elem.on('focus', function () {
/* Since JS events fire asynchronously and outside
* of the "Angular context" we need to call `$apply()` */
scope.$apply(function () {
ctrl.$blurred = false;
});
});
/* Update the property value on blur */
elem.on('blur', function () {
/* Since JS events fire asynchronously and outside
* of the "Angular context" we need to call `$apply()` */
scope.$apply(function () {
ctrl.$blurred = true;
});
});
}
};
});
<form name="form1">
<input type="text" name="text1" ng-model="something" blur-monitor />
<p>Blurred: {{form1.text1.$blurred}}</p>
</form>
另请参阅此 short demo 。