スコープ内の値を検証するカスタム ディレクティブを作成しています。これは必須属性のように機能するはずですが、入力テキストを検証する代わりに、スコープ内の値を検証します。私の問題は、この値が $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
ありがとう。