我正在编写一个自定义指令来验证范围内的某些值。它应该像 required 属性一样工作,但不是验证输入文本,而是验证范围内的值。我的问题是这个值是在 $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>
这是一个笨蛋:http://plnkr.co/edit/S2NrYj2AbxPqDrl5C8kQ?p= preview
谢谢。