我正在重构我的整个应用程序,我现在正在关注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未定义。我有点失落和挣扎在这...任何帮助表示赞赏!不应该太难,但我无法弄清楚。我希望这很清楚!
答案 0 :(得分:1)
当您使用$inject
注入依赖项时,您需要以与函数参数相同的顺序传递相同的依赖项!所以,以下应该有效!
angular.controller('TutorialCtrl', TutorialCtrl);
TutorialCtrl.$inject = ['$state', '$ionicSlideBoxDelegate', '$ionicSideMenuDelegate'];
function TutorialCtrl($state, $ionicSlideBoxDelegate, $ionicSideMenuDelegate) {
$ionicSideMenuDelegate.canDragContent(false);
}