我在学习如何正确使用自定义指令的bindToController功能,并想知道如何从指令控制器访问您在bindToController对象中声明的属性。Angular 1.5:访问控制器内的bindToController属性
var myApp = angular.module('myApp',[])
.directive('myDir', MyDir)
.controller('MyCtrl',['$scope', MyCtrlFn]);
function MyCtrlFn($scope) {
var ctrl = this;
this.ctrlStr = '';
this.ctrlAsStr = '';
$scope.$watch(this.name, function(newValue) {
if(newValue) ctrl.ctrlStr += ' '+newValue;
})
$scope.$watch('ctrl.name', function(newValue) {
if(newValue) ctrl.ctrlAsStr += ' '+newValue;
})
}
function MyDir() {
return {
template: '<div>{{ctrl.name}}</div>'+
'<div>CtrlStr: {{ctrl.ctrlStr}}</div>'+
'<div>CtrlAsStr: {{ctrl.ctrlAsStr}}</div>',
scope: {},
bindToController: {
name: '='
},
restrict: 'E',
controller: 'MyCtrl',
controllerAs: 'ctrl'
}
}
的jsfiddle这里:http://jsfiddle.net/jrtc1bLo/2/
于是我想到了性能结合到控制器,但似乎他们宁愿绑定到范围控制器别名。
什么是从控制器访问它们的好方法?
感谢
你能解释一下你在做什么吗?我想你可能会在不知不觉中滥用bindToController。有可能你可以一起避免它,只是使用父范围。 – Lansana
'$ scope。$ watch('ctrl.name',...'不会绑定到任何有用的东西,因为您将'name'绑定到控制器而不是范围,您应该执行'$ scope。$ watch(函数(){return this.name;},...)'? – Mike
@Mike你的答案的第二部分几乎是正确的,但'this'没有引用我的控制器,所以'return ctrl。name'作品(cf @georgeawg答案) – ValLeNain