2014-07-15 28 views
0

我在尝试验证指令内部的输入。考虑以下内容:从内部指令链接功能访问ng-model

.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

您能解释更多关于您的问题吗?链接函数中的一些示例代码以及如何使用该指令的html会很好。 –

+0

在你的'holder'类上使用'ng-form'肯定会有所帮助。然后,验证将与在窗体标签中一样 – charlietfl

回答

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