从AngularJS中的指令调用父控制器方法

时间:2014-11-12 17:35:09

标签: angularjs angularjs-directive angularjs-scope

我有一种情况,我想从ng-change的指令调用父控制器方法。对控制器方法的调用永远不会触发,不确定什么是错误的。 任何帮助将非常感激。 感谢

示例代码:

<body ng-app="content-app" ng-controller="ParentController">
    <div header-menu report-manager="model"></div>
</body>

report-manager是一个典范。

标题菜单指令:

var $module = angular.module('content-app');

    $module.directive('headerMenu', function () {
        return {
            restrict: 'AE',
            scope: {
                reportManager: '='
            },
            templateUrl: '/scripts/app/directives/header-menu.template.htm'
        };
    });

标题-menu.template.htm

<div>
  <ul>
     <li ng-repeat="filter in filters" ng-controller="ChildController" ng-change="method()" />
  </ul>
</div>

ParentController。

angular.module('content-app')
.controller("MainController", ['$scope', function($scope) {
    $scope.method = function () { // do something };
}]);

1 个答案:

答案 0 :(得分:1)

方法需要通过"&"传递到指令中,您可以使用“&amp;”传递函数

$module.directive('headerMenu', function () {
    return {
        restrict: 'AE',
        scope: {
            reportManager: '=',
            method: "&" // needs to be passed into the headerMenu directive
        },
        templateUrl: '/scripts/app/directives/header-menu.template.htm',
        link: function(scope, element, attrs){
            scope.makeChange = function(){
                scope.method();
            }
        }
    };
});

HTML:

<div header-menu method="method()" report-manager="model"></div> 

 <li ng-repeat="filter in filters" ng-controller="ChildController" ng-change="makeChange()" />