AngularJS:将ngModel从控制器传递到指令
AngularJS: passing ngModel from controller to directive
我有一个控制器,里面有一个属性指令,这个指令需要它的父控制器的ngModel。
看这个Plunkr
虽然表单加载正确,但指令内的日志显示如下:
a.$…t.aa {$attr: Object, $$element: R[1], fieldValidator: "", boundModel: "person", ngModel: undefined}
知道为什么ngModel是未定义的,为什么boundModel包含字符串'person'吗?
try this
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: '=ngModel' }
表示通过ng-model
属性传递boundModel
属性。但是在模板中不使用ng-model
属性。你有bound-model
代替。
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的人的有效性等。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- Angular,从指令控制器中的控制器触发函数
- 角度指令控制器:参数不是函数,未定义
- 如何将值传递到角度中的指令控制器
- angularjs+ui.router:指令控制器和链接函数之间的不同行为
- 如何使用角度指令控制器动态单击复选框
- 如何从父指令/控制器访问指令范围
- 角度指令 - 需要从指令控制器访问所需的控制器
- 指令链接中的范围变量不会更新到指令控制器使用 Angular 读取它时
- 从链接函数修改指令控制器变量
- 监视指令控制器不工作
- Angular js 指令控制器访问范围属性,但返回未定义
- 指令控制器和普通控制器之间的区别
- 角度指令链接函数中的范围是否与角度指令控制器中的$scope相同
- AngularJS :如何从相同的指令控制器访问指令范围
- 角度“这个”在指令控制器内不起作用
- 列出 AngularJS 模块中声明的指令/控制器
- 角度指令控制器单元测试使用窗口.确认
- 从指令控制器到控制器的角度共享数据
- UI 引导程序自定义指令控制器不是一个函数