0
我正在编写自定义指令来验证作用域中的某个值。它应该像所需的属性一样工作,但不是验证输入文本,而是验证范围中的值。我的问题是这个值设置在$ scope。$ watch函数中,并且此函数在我的指令之后运行。所以当我的指令试图验证它尚未设置的值时。在运行我的自定义指令之前是否可以运行$ watch代码?
下面是代码:
var app = angular.module('angularjs-starter', []);
app.controller('MainCtrl', function($scope) {
var keys = {
a: {},
b: {}
};
$scope.data = {};
// I need to execute this before the directive below
$scope.$watch('data.objectId', function(newValue) {
$scope.data.object = keys[newValue];
});
});
app.directive('requiredAttribute', function(){
return {
require: 'ngModel',
link: function(scope, elem, attr, ngModel) {
var requiredAttribute = attr.requiredAttribute;
ngModel.$parsers.unshift(function (value) {
ngModel.$setValidity('requiredAttribute', scope[attr.requiredAttribute] != null);
return value;
});
}
};
});
<input type="text" name="objectId" ng-model="data.objectId" required-attribute="object" />
<span class="invalid" ng-show="myForm.objectId.$error.requiredAttribute">Key "{{data.objectId}}" not found</span>
这里是一个plunker:http://plnkr.co/edit/S2NrYj2AbxPqDrl5C8kQ?p=preview
感谢。