Javascript 从指令内访问关联控制器
像这样的HTMLJavascript 从指令内访问关联控制器,javascript,angularjs,Javascript,Angularjs,像这样的HTML <div ng-app="myApp"> <div ng-controller="inControl"> I like to drink {{drink}}<br> <input my-dir ng-model="drink"></input> </div> </div> var app = angular.module('myApp', [])
<div ng-app="myApp">
<div ng-controller="inControl">
I like to drink {{drink}}<br>
<input my-dir ng-model="drink"></input>
</div>
</div>
var app = angular.module('myApp', []);
app.controller('inControl', function($scope) {
$scope.drink = 'water';
});
app.directive('myDir', function(){
return {
restrict: 'A',
link: function($scope, element, attrs, ctrl) {
// why is this logging undefined?
console.log(ctrl);
}
};
});
为什么我不能从指令中访问控制器?为什么我对ctrl
的调用未定义
编辑:添加演示
此处可用的Fiddle:请参见多个控制器可以与一个应用程序连接,类似地,多个指令可以与一个应用程序连接,因此,如果您希望在一个指令中使用一个控制器,则可以将指令的控制器属性设置为您希望与之连接的控制器的名称,就像您的情况一样
app.directive('myDir', function(){
return {
restrict: 'A',
controller: 'inControl'
link: function($scope, element, attrs, ctrl) {
// why is this logging undefined?
console.log(ctrl);
}
};
});
添加
require:'ngModel',
为我修复了它-不确定是否有其他方法指定它
app.directive('myDir', function(){
return {
restrict: 'A',
require: 'ngModel',
link: function($scope, element, attrs, ctrl) {
// why is this logging undefined?
console.log(ctrl);
}
};
});
尽管使用
require:ngModel
,这仍然不是最好的方法,因为它将指令直接绑定到控制器。如果希望指令与控制器通信,可以设置并读取范围
HTML:
或者,您可以使用my dir=“{{drink}}”
并将其读取为attrs.myDir
您希望从控制器访问什么?您可以访问
范围
?@tymeJV-我想访问ctrl.$modelView
我将控制器属性添加到指令中,它似乎对我有效。我更喜欢jsbin而不是jsfiddle,因为在我的控制台中没有任何错误。很好,我想我明白了。。。需要添加require:'ngModel',
以返回object看起来很有意义,但对我来说不起作用-我仍然无法定义ctrl
内部函数。正如我在上一条评论中提到的-我想我解决了<代码>要求:'ngModel'
<div ng-app="myApp">
<div ng-controller="inControl">
I like to drink {{drink}}<br />
<input my-dir="drink"></input>
</div>
</div>
var app = angular.module('myApp', []);
app.controller('inControl', function($scope) {
$scope.drink = 'asdfasdf';
});
app.directive('myDir', function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
console.log(scope[attrs.myDir]);
}
};
});