我正在尝试验证指令内的输入。请考虑以下事项:
.directive('test', function ($parse, $http, $sce, $timeout) {
return {
restrict: 'EA',
scope: {
},
template: '<div class="holder">
<input id="A" name="inputA" ng-model="modelA" />
<input id="B" name="inputB" ng-model="modelB" />
</div>',
link: function($scope, elem, attrs) {
}
}
如果我想在链接功能中进行自己的自定义验证,我将如何引用“modelA”模型? $ scope.modelA似乎只引用输入内部的值,而不是模型本身(正如我所理解的那样,这是我需要验证的)。我能找到的所有其他引用似乎都处理来自父作用域的绑定引用模型,这是我不需要的。
我错过了什么?
答案 0 :(得分:0)
我看到你正在使用一个孤立的范围,我无法判断你的问题是否属于你的一部分,但是如果有一个孤立的范围而没有属性,那么指令之外的父范围将无法访问内部的值,反之亦然。我创建了一个解释孤立范围的插件:(plnkr)。如果要访问父作用域上的值,您可能需要这样的指令范围:
scope: {
modelA: "=modelA",
modelB: "=modelB"
},
然后调用你的指令就会这样:
<test model-a="firstName", model-b="lastName"/>
另一个问题可能是链接函数每次使用指令时只执行一次,因为它正在处理它并链接它。例如,如果modelA
的值发生更改,则不会再次调用链接函数。如果您想在modelA
更改时执行某些操作,则需要为链接功能的更改设置观察程序。请注意,它将在最初调用一次而不更改值:
link: function($scope, elem, attrs) {
$scope.$watch('modelA', function(newValue, oldValue) {
console.log('modelA changed from', oldValue, 'to', 'newValue');
});
}