如何在angularjs中调用具有依赖关系的父方法

时间:2013-09-06 01:50:23

标签: angularjs angularjs-scope

我正在尝试将divng-click一起用于路由:

ng-click="go('/item/{{item.id}}')。

使用$parent.go时,我可以致电go甚至ParentCtrl。但是ParentCtrl_2根本不起作用。我试图寻找一些答案,但无法弄清楚。我错过了什么?

app.controller('ParentCtrl', function($scope) {
        $scope.go = function(path) {
            console.log(path);
        }
    }
);

app.controller('ParentCtrl_2', ['$scope', '$location',
    function($scope, $location) {
        $scope.go = function(path) {
            $location.path(path);
        }
    }
]);

app.controller('ChildCtrl', ['$scope', '$routeParams',
    function($scope, $routeParams) {
        ...
    }
]);

1 个答案:

答案 0 :(得分:1)

这里有许多未解答的问题,但是,就像你的html ng-controller结构的结构一样。

html中的调用sytax也是错误的

ng-click="go('/item/{{item.id}}')

应该是

ng-click="go('/item/'+ item.id)"

表示根据声明ng-click的位置,它可以访问父方法。如果您可以使用$parent访问方法,那么由于原型继承,您可以直接访问该方法。

如果结构如

<div ng-controller='ParentCtrl'>
    <div ng-controller='ParentCtrl_2'>
           <div ng-controller='ChildCtrl'>
                  <!-- ng-click somewhere here -->
           </div>
    </div>
</div>

然后,只要您致电,就可以访问ParentCtrl_2方法go

如果是

    <div ng-controller='ParentCtrl'>
        <div ng-controller='ParentCtrl_2'>

        </div>
        <div ng-controller='ChildCtrl'>
            <!-- ng-click somewhere here -->
        </div>
    </div>

然后,您只能访问ParentCtrl方法go方法。