如何在子指令中访问父控制器的功能

时间:2018-10-15 09:59:49

标签: angularjs

如何从子指令内的父控制器调用函数?

我的控制器看起来像这样。

angular.module('myVillage')
  .controller('myVillageController', myVillageController);

function myVillageController($scope, $q, $element, $timeout) {
  function moveHome() {
    console.log("moved home")
  }
}

我的指令看起来像这样。

angular
  .module('myVillage')
  .directive('myVillagModal', myVillagModal);

var vm = this,

  cachedKeys = {},
  limitInit = 500;
function myVillagModal(myVillage, $filter) {
  return {
    restrict: 'E',
    templateUrl: myVillagelTemplateUrl,
    bindToController: true,
    scope: {
      items: '=',
      selectedItems:'=',
      selectedItemsChanged: '&'
    },
    transclude: true,
    controller: myVillageController,
    controllerAs: 'vm'
  };

  function myVillageController() {
    //....
  }
}

我想在move-village指令中调用moveHOme函数。

<div ng-controller="myVillageController">
  <move-village></move-village>
  </div>

2 个答案:

答案 0 :(得分:1)

您可以尝试

$scope.$parent.moveHome();

从子控制器开始。

答案 1 :(得分:0)

谢谢大家,我试图回答。

由于我无法访问父控制器作用域,因此我无法在myVillagecontroller内部传递$ scope。

这是我的答案。

angular
  .module('myVillage')
  .directive('myVillagModal', myVillagModal);

var vm = this,

  cachedKeys = {},
  limitInit = 500;
function myVillagModal(myVillage, $filter) {
  return {
    restrict: 'E',
    templateUrl: myVillagelTemplateUrl,
    bindToController: true,
    scope: {
      items: '=',
      selectedItems:'=',
      selectedItemsChanged: '&'
    },
    transclude: true,
    controller: myVillageController,
    controllerAs: 'vm'
  };

  function myVillageController($scope) {
    //$scope.$parent now gives the scope of parent controller
    //....
    $scope.$parent.moveHome(); //this gives 'moved home'
  }
}