无法在$ inject中使用$ ionicSideMenuDelegate

时间:2017-04-20 09:49:43

标签: angularjs dependency-injection

我正在重构我的整个应用程序,我现在正在关注John Papa的风格指南。
基本上我的控制器来自:

.controller('TutorialCtrl', function($scope, $state, $ionicSlideBoxDelegate, $ionicSideMenuDelegate) {

  $ionicSideMenuDelegate.canDragContent(false);

}

(使用匿名功能)

(function(){
  'use strict';

  angular
    .module('app.tutorial')
    .controller('TutorialCtrl', TutorialCtrl);

    TutorialCtrl.$inject = ['$scope', '$state', '$ionicSlideBoxDelegate', '$ionicSideMenuDelegate'];

    function TutorialCtrl() {
      //do stuff here
    }

我无法看到如何让它发挥作用。我使用匿名声明函数来使用$ ionicSideMenuDelegate,现在我想我必须声明一个函数来实现这一点。我不确定这是否可行,因为当我尝试时:

angular.controller('TutorialCtrl', TutorialCtrl);

TutorialCtrl.$inject = ['$state', '$ionicSlideBoxDelegate', '$ionicSideMenuDelegate'];

function TutorialCtrl($ionicSideMenuDelegate) {
      $ionicSideMenuDelegate.canDragContent(false);
}

它说" $ ionicSideMenuDelegate.canDragContent不是函数",当我尝试时:

angular.controller('TutorialCtrl', TutorialCtrl);

    TutorialCtrl.$inject = [
        '$scope',
        '$state', 
        '$ionicSlideBoxDelegate', 
        '$ionicSideMenuDelegate'
    ];
    $scope.$on('$ionicView.enter', function () {
        $ionicSideMenuDelegate.canDragContent(false);
    });

它表示$ scope未定义。我有点失落和挣扎在这...任何帮助表示赞赏!不应该太难,但我无法弄清楚。我希望这很清楚!

1 个答案:

答案 0 :(得分:1)

当您使用$inject注入依赖项时,您需要以与函数参数相同的顺序传递相同的依赖项!所以,以下应该有效!

angular.controller('TutorialCtrl', TutorialCtrl);

TutorialCtrl.$inject = ['$state', '$ionicSlideBoxDelegate', '$ionicSideMenuDelegate'];

function TutorialCtrl($state, $ionicSlideBoxDelegate, $ionicSideMenuDelegate) {
      $ionicSideMenuDelegate.canDragContent(false);
}