这是一段判断两次密码输入是否相同的指令,我们知道,require属性是用来设定控制器的
分别有前缀: ? , ^ , 前缀可以加也可以不加
比如 require: 'thisDirective',那么require只会在当前指令中查找控制器
require: "^parentDirective" , 那么就会到上游指令中查找控制器
require: "?thatDirective" 如果在当前指令没有找到控制器,就将null作为link的第四个参数
如下段代码
app.directive('myPwdMatch', [function(){ return { restrict: "A", require: 'ngModel', link: function(scope,element,attrs,ctrl){ tageCtrl.$parsers.push(function(viewValue){ ctrl.$setValidity('pwdmatch', viewValue == ctrl.$viewValue); return viewValue; }); ctrl.$parsers.push(function(viewValue){ if(viewValue == tageCtrl.$viewValue){ ctrl.$setValidity('pwdmatch', true); return viewValue; } else{ ctrl.$setValidity('pwdmatch', false); return undefined; } }); } }; }]);
在此段代码中require:'ngModel' , 这里控制器是基于上游控制器的当前指令的控制器,上游控制器的内容,此指令控制器中都有但是无法对上游控制器进行影响,
上下游控制器之间的关系应该是和原型一样的,
上游的控制器就好像底层的原型,下游的控制器是表层的原型,
表层的原型能够使用底层原型的内容,同时,表层原型的修改不会影响到底层原型.
同一级的原型之间又彼此相互独立,虽然都继承自同一个底层控制器.