从父指令angularjs访问范围

时间:2015-05-21 02:18:25

标签: angularjs angularjs-directive angularjs-scope

我有两个指令,我希望它像这样使用它:

<m-list m-searchable></m-list>

所以这两个指令是m-listm-searchable,现在我想在附加m-list指令时访问和操作m-searchable的范围。

我有这个:

'use strict';

angular.module('app')
  .directive('mList', function () {
    return {
      restrict: 'E',
      scope: {},
      controller: function($rootScope) {
        var vm = this;
        vm.name = 'joey';
      },
      controllerAs: 'ctrl',
      bindToController: true,
      templateUrl: '...'
    };
  });

我的m-searchable看起来像这样:

angular.module('app')
  .directive('mSearchable', function () {
    return {
      restrict: 'A',
      scope: {},
      controllerAs: 'ctrl',
      bindToController: true,
      replace: true,
      controller: function($rootScope, $scope) {
        // I want console.log the scope of the directive where I attached the `m-searchable`
      }
    };
  });

我希望console.log我附加m-searchable的指令的范围。如何访问vm.name

1 个答案:

答案 0 :(得分:0)

首先,我认为你会遇到$ compile错误,因为这两个指令试图在同一个元素上拥有自己的隔离范围。

https://docs.angularjs.org/error/ $编译/ multidir P0 = mList&安培; P1 = mSearchable&安培; P2 =新%2Fisolated%20scope&安培; P3 =%3CM列表%20米可搜索%3D%22%22%3E

更新:http://juristr.com/blog/2015/01/learning-ng-directives-access-scope-controller/

建议的更好方法

是在控制器和放大器之间传递对象。指令

<m-list m-searchable name="name"></m-list>

app.directive('mList', function () {
return {
  restrict: 'E',
  scope: { name: "="},
  controller: function($rootScope, $scope) {
    var vm = this ; 
    vm.name = 'joey';

  },
  controllerAs: 'ctrl',
  bindToController: true
};
});

http://plnkr.co/edit/OKVicRzjuH6L0xedF2qB?p=preview