javascript - 使用 controllerAs 的 ngScope Angular 指令

标签 javascript angularjs angularjs-directive angularjs-scope

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

在精简的示例中,用户应该能够在指令中编辑 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/

相关文章:

javascript - Magento : One Page Checkout Alignment Issue (Payment Method)

javascript - 告诉子指令在父指令完成 DOM 操作后执行操作?

javascript - 由于多种原因,AngularJS 应用程序无法在 IE 8 中正确呈现

javascript - Angular 中未知的 $http 提供者

javascript - 将查询结果对象传递给单独的函数

javascript - 如何在 JavaScript 中以 dd/mm/yyyy 格式显示昨天的日期

css - 使用 PhantomJS 将页面呈现为 PDF 时不考虑外部和本地 CSS

javascript - AngularJS 中的警报计时器值

javascript - 有没有办法静态评估 JavaScript 中函数的参数?

angularjs - 如何使用循环遍历 Angular $scope 变量