gpt4 book ai didi

javascript - 使用 vm 而不是 $scope 引用指令属性

转载 作者:搜寻专家 更新时间:2023-11-01 04:14:25 24 4
gpt4 key购买 nike

我有一个看起来像这样的自定义指令:

<my-queue id="report.id" version="report.version"></my-queue>

在我的指令定义对象中,我像这样引用我的 Controller 和作用域:

controller: 'QueueController',
controllerAs: 'myQueue',
scope: {
id: '=',
version: '='
}

在我的 Controller 中,我设置了 var vm = this,这样我就可以将范围变量称为 vm.variable。然而,这不适用于 idversion。我发现我需要注入(inject) $scope 并将这些属性引用为 $scope.id$scope.version。有没有一种方法可以设置它,这样我就可以避免注入(inject) $scope 并通过引用 vm.idvm 与我的 Controller 的其余部分保持一致。版本?

最佳答案

指令配置对象上的 controllerAs 属性将用于引用 Controller 实例,因此如果您想在模板中使用 vm,则需要设置 controllerAs 属性到 vm。此外,通过将 bindToController 属性设置为 true,您可以直接绑定(bind)到 View 模型而不是 $scope:

function myQueue() {
return {
restrict: 'E',
template: ... ,
controller: myQueueCtrl,
controllerAs: 'vm',
scope: {
id: '=',
version: '='
},
bindToController: true
}
}

使用您当前的指令配置,您的 controllerAs 引用将位于 myQueue 下,而不是 vm,这意味着您在 上创建的任何属性>vm(例如 vm.id)在您的 Controller 中将位于您模板中的 myQueue(例如 myQueue.id)。

通过添加 bindToController,我们不需要在指令的 Controller 中注入(inject) $scope:

function QueueController() {
var vm = this;
}

然后你可以在指令模板中引用你的变量

{{vm.id}}
{{vm.version}}

有个笨蛋herebindToController 设置为 true,并将 controllerAs 设置为 vm

关于javascript - 使用 vm 而不是 $scope 引用指令属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273436/

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