gpt4 book ai didi

javascript - 将指令与 controllerAs 一起使用

转载 作者:行者123 更新时间:2023-11-30 08:31:40 25 4
gpt4 key购买 nike

据我所知,在“指令定义对象”上使用 Controller 属性会在每次链接给定指令时创建该 Controller 的单独实例吗?

现在玩 controllerAs patterns 我可以看到,当每个指令被编译时, Controller 工厂函数被触发,为 this.data.hello 方法提供不同的结果。

但在我看来,我得到的是该 Controller 的最后一个实例。这是为什么?我错过了什么?

js

angular.module('app', [])
.controller('customCtrl', function () {
console.log('controller');

this.data = {
hello: Math.floor(Math.random() * 200 + 1)
};
})
.directive('customDrv', function () {
var linkFn = function (scope, element, attrs, ctrl) {
console.log('link');
console.log(ctrl.data.hello);
};

return {
templateUrl: 'Home/CustomDrv',
restrict: 'E',
controller: 'customCtrl',
controllerAs: 'vm',
compile: function (element, attrs) {
console.log('compile');

return linkFn
}
}
})

HTML

<custom-drv></custom-drv>
<custom-drv></custom-drv>
<custom-drv></custom-drv>
<custom-drv></custom-drv>

笨蛋:https://plnkr.co/edit/HII9a7Ff6ryXuz6Fgzr6

最佳答案

要为 this.data.hello 方法获得不同的结果,请创建隔离范围为 -

angular.module('app', [])
.controller('customCtrl', function () {
//console.log('controller');

this.data = {
hello: Math.floor(Math.random() * 200 + 1)
};
})
.directive('customDrv', function () {
var linkFn = function (scope, element, attrs, ctrl) {
//console.log('link');
console.log(ctrl.data.hello);
};

return {
template: '<h1>{{vm.data.hello}}</h1>',
restrict: 'E',
scope: {},
controller: 'customCtrl',
controllerAs: 'vm',
compile: function (element, attrs) {
//console.log('compile');

return linkFn
}
}
})

关于javascript - 将指令与 controllerAs 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com