我有一个控制器,里面有一个属性指令,该指令需要它的控制器父级的ngModel。
请参阅此Plunkr。
问题
虽然表单正确加载,但指令中的日志显示为:
a.$…t.aa {$attr: Object, $$element: R[1], fieldValidator: "", boundModel: "person", ngModel: undefined}
知道为什么ngModel未定义以及为什么boundModel包含字符串' person'?我一直盯着这个......
答案 0 :(得分:1)
试试这个
app.directive('fieldValidator', [function(){
return {
restrict: 'A',
scope: {
boundModel: '='
},
controller: function($scope){
},
link: function ($scope, $elem, $attrs) {
console.log($scope.boundModel);
}
}
}]);
像其他人说的那样,没有使用该指令的ng-model。
boundModel: '='
是boundModel: '=boundModel'
如果您想访问boundModel,那么只需使用$ scope.boundModel忽略$ attr中显示的内容,而不是您需要的内容。
答案 1 :(得分:0)
{ boundModel: '=ngModel' }
表示您通过boundModel
属性传递ng-model
属性。但是在模板中,您不使用ng-model
属性。你改为bound-model
。
答案 2 :(得分:0)
scope: {
boundModel: '=ngModel'
},
您错误地使用了范围变量。当您说'= ngModel'时,您说该指令上有一个名为'ng-model'的属性,您希望在指令中使用该属性作为scope.boundModel。
您似乎想要使用ng-model控制器,为什么不在指令上使用ng-model而不是boundModel?
您可以将html中的绑定模型重命名为ng-model,并从指令中删除范围。如果你想使用ngModelController,你需要在指令链接函数中注入它,如下所示:
return {
restrict: 'A',
required: '^ngModel',
scope: {},
controller: function($scope){
},
link: function ($scope, $elem, $attrs, ngModel) {
console.log($attrs);
}
}
使用ngModelController,您可以在html中设置绑定到ng-model的人的有效性等,如记录here。