我有以下代码。为什么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";
}
}
答案 0 :(得分:2)
要在控制器内部指令中使用this
,您需要使用controllerAs: 'ctrl'
,但在模板中,您需要在所有名称前加上{{ctrl.name}}
,或者您可以使用$ scope,如:
function myController($scope) {
$scope.name="vfdfbdn";
}
答案 1 :(得分:1)
function myObject(){
return {
restrict: 'E',
template: '<div>{{c.name}}</div>',
scope: {},
controller: myController,
controllerAs: 'c'
};
function myController(){
var vm = this;
vm.name="vfdfbdn";
}
};
请参阅this question了解相关事项
答案 2 :(得分:0)
试试这个:
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";}
答案 3 :(得分:0)
您需要告诉Angular您将如何从视图中的控制器引用this
。
function myObject(){
return {
restrict: 'E',
templateUrl: 'my-obj.html',
scope: {},
controller: myController,
controllerAs: 'ctrl'
};
}
现在,您可以使用this
引用您在控制器中命名为vm
的{{1}}指定的所有内容。
我使用 ctrl 来显示您在视图中用来引用它的名称与ctrl
设置的名称以及您为{{1}提供的名称之间没有相关性在控制器功能内部。引用具有不同 controllerAs 引用的不同控制器是正常的,因此您现在可以在视图中引用它们。