[英]Angular 'this' not working inside directive controller
我有以下代码。 vm.name
为什么不起作用? 为什么未检测到控制器内部的this
? 我没有为指令定义封闭scope
吗?
我究竟做错了什么?
var mod = angular.module('myApp', []);
mod.directive('myObj', myObject);
function myObject(){
return {
restrict: 'E',
templateUrl: 'my-obj.html',
scope: {},
controller: myController
};
function myController(){
var vm = this;
vm.name="vfdfbdn";
}
}
要在controller内部指令中使用this
命令,您需要使用controllerAs: 'ctrl'
但是在模板中,您将需要在所有名称前加上{{ctrl.name}}
前缀,或者可以使用$ scope像这样:
function myController($scope) {
$scope.name="vfdfbdn";
}
function myObject(){
return {
restrict: 'E',
template: '<div>{{c.name}}</div>',
scope: {},
controller: myController,
controllerAs: 'c'
};
function myController(){
var vm = this;
vm.name="vfdfbdn";
}
};
请参阅此问题以了解内容
尝试这个:
function myObject() {
return {
restrict: 'E',
templateUrl: 'my-obj.html',
scope: {},
bindToController: true,
controller: myController
};
}
myController.$inject = ['$scope'];
function myController($scope){
var vm = this;
vm.name="vfdfbdn";}
您需要告诉Angular您将如何从视图中的控制器引用this
。
function myObject(){
return {
restrict: 'E',
templateUrl: 'my-obj.html',
scope: {},
controller: myController,
controllerAs: 'ctrl'
};
}
现在,您可以引用分配给this
所有内容,即您在控制器中使用ctrl
命名为vm
。
我使用ctrl来显示在视图中用来引用它的名称(由controllerAs
设置)与您在控制器函数中this
的名称之间没有关联。 用不同的controllerAs引用来引用不同的控制器是很正常的,因此现在您可以在视图中引用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.