如何在指令中访问控制器(来自外部文件)的范围?

时间:2015-10-07 21:04:34

标签: javascript angularjs

我的控制器位于一个名为controller.js的独立文件中,我的app.js设置如此

angular.module('WeCompeteApp', [
    'WeCompeteApp.controllers',
    'WeCompeteApp.services',
    'WeCompeteApp.utilities',
    'WeCompeteApp.filters',
    'ui.router',
    'ngSanitize'
])

所以我的控制器文件中有一个名为ChallengesController的控制器,我试图将其包含在我的指令中以访问其中一个函数。

我的指示看起来像

.directive('whenScrolled', ['$http', function($http) {

    return {
        restrict: 'A',
        controller: 'ChallengesController',
        scope: {
            challenges: '=',
            page: '=',
            filter: '='
        },
        link: function(scope, elm, attr, ChallengesCtrl) {

            var raw = elm[0];

            elm.bind('scroll', function() {

                if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {

                    console.log('scrolled to bottom');

                    if (scope.challenges.length >= 20) {

                        ChallengesCtrl.getChallenges(scope.page, 20, scope.filter);

                    }

                }

            });

        }

    };

}]);

但是当我尝试运行该函数时,我得到ChallengesCtrl未定义,所以我不确定这是否设置正确。非常感谢任何帮助,如果需要更多信息,请说明。

1 个答案:

答案 0 :(得分:2)

您的linkcontroller共享相同的范围:

ChallengesCtrl移除link的注入并更改:

ChallengesCtrl.getChallenges(scope.page, 20, scope.filter);

scope.getChallenges(scope.page, 20, scope.filter);

link中唯一一次控制器注入的时间是require另一个指令控制器