从内部指令链接功能访问ng-model

时间:2014-07-15 22:05:00

标签: javascript angularjs

我正在尝试验证指令内的输入。请考虑以下事项:

.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似乎只引用输入内部的值,而不是模型本身(正如我所理解的那样,这是我需要验证的)。我能找到的所有其他引用似乎都处理来自父作用域的绑定引用模型,这是我不需要的。

我错过了什么?

1 个答案:

答案 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');
    });
}