我希望这不是一个重复的 – 很多类似的问题,但我找不到一个有效的答案。
我有一个角度指令,因此:
app.directive('emailInput',function(){ return { restrict: 'E',templateUrl: 'template.html',link: function(scope,elem,attrs,ctrl){ elem.bind('keyup',function(){ // TODO - what? }) } } }
并在模板html中:
<input type="email" required ng-model="emailAddress" />
您可以要求formController,这将允许您访问注册到表单的所有输入
app.directive('emailInput',function(){ return { require: '^form',// We look for it on a parent,since it will be defined somewhere higher on the DOM. restrict: 'E',ctrl){ elem.bind('keyup',function(){ ctrl.emailAddress.$valid //check validity }) } } }
请记住,Angular会按照名称跟踪输入元素。所以你必须给你的输入一个name属性
<input type="email" required ng-model="emailAddress" name="emailAddress" />
我也建议可能通过指令属性传递所有这些。你可能不想硬编码字段名称。所以你可以只有一个具有有效性的属性
inputIsValid='formName.emailAddress.$valid'
并在您的指令中评估(或$ watch it)。