gpt4 book ai didi

javascript - 使用 controllerAs 的 ngScope Angular 指令

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

我正在尝试制作一个简单的指令,它是对象的编辑器和选择器的组合。

在精简的示例中,用户应该能够在指令中编辑 person,并最终选择一个绑定(bind)到 ng-model 的人,这样他们引用他们选择的人。

我的问题是我不确定将 ng-model 绑定(bind)到我 Controller 上的选定人员的最佳方法。

我在这里为此创建了一个插件:http://plnkr.co/edit/usWpu82VXHIE3R2vgHgv?p=preview

这是我的指令的样子

  angular
.module('pe')
.directive('personEditor', PersonEditorDirective);

function PersonEditorDirective() {
var directive = {
restrict: 'E',
templateUrl: 'personEditor.html',
controller: PersonEditorCtrl,
controllerAs: 'vm',
scope: {
ngModel: '='
}
};

PersonEditorCtrl.$inject = ['$scope', 'dataservice'];
return directive;

function PersonEditorCtrl($scope, dataservice) {
var vm = this;
$scope.vm = vm;

vm.people = dataservice.getPeople();
//set selected to the first
vm.person = vm.people[0];
}
}

在我的指令 Controller 中,vm.people 是所有人员的数组。 vm.person 是当前选择的人,我想将其绑定(bind)到消费者作为 ng-model 传递的任何内容。

使用指令会是这样的

 <person-editor ng-model='vm.selectedPerson'></person-editor>

<span>The currently selected person is {{vm.selectedPerson.name}}</span>

在我的 Controller 中,我知道 $scope.ngModel 是他们传入的对象,我可以更改它或其他任何内容,但是将其绑定(bind)到的最佳/最简单方法是什么我的 Controller 的 vm.person?

让我按照我想要的方式工作的唯一方法是观察选择元素何时更改其选择,然后手动设置 $scope.ngModel = vm.person,感觉就像错误的方法。

我可以得到一些方法来实现我想要的吗?

最佳答案

在 Angular 1.3 中,您可以使用 bindToController 告诉指令将隔离范围值绑定(bind)到 Controller 实例。有了它,ngModel 现在作为 person 属性附加在 Controller 实例上,而不是 $scope...

var directive = {
restrict: 'E',
templateUrl: 'personEditor.html',
controller: PersonEditorCtrl,
controllerAs: 'vm',
scope: {
person: '=ngModel'
},
bindToController: true
};

Plunker

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

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