2016-05-03 3 views
1

Я написал простое Угловое приложение и для моей маршрутизации я использовал ui.router, но я получаю эту ошибку:Угловая ui.router не может утверждать, контроллер, получила неопределенные

Argument 'loginController' is not a function, got undefined

modules.js:

(function() { 
    'use strict'; 
    angular.module('account', ['ui.router']); 
    angular.module('app', ['account', 'ui.router']); 
})(); 

routeConfig.js:

(function() { 
    'use strict'; 
    var account = angular.module('account'); 
    account.config(function ($stateProvider, $urlRouterProvider) { 
     // For any unmatched url 
     $urlRouterProvider.otherwise('/login'); 
     $stateProvider 
      .state('login', { 
       url: '/login', 
       templateUrl: '/app/components/account/login.html', 
       controller: 'loginController' 
      }); 
    }); 
})(); 

account.js:

(function() { 
    'use strict'; 
    var account = angular.module('account'); 
    account.controller('loginController', ['$scope', loginController]); 
    function loginController($scope) { 
     $scope.Title = 'login'; 
    }; 
}); 

index.html:

<!DOCTYPE html> 
<html ng-app="app"> 
<head> 
    <title></title> 
</head> 
<body> 
    <div ui-view> 
    </div> 

    <script src="Scripts/jquery-1.9.1.js"></script> 
    <script src="Scripts/angular.js"></script> 
    <script src="Scripts/angular-ui-router.js"></script> 
    <script src="app/modules.js"></script> 
    <script src="app/routeConfig.js"></script> 
    <script src="app/components/account/account.js"></script> 
</body> 
</html> 

login.html:

<h4>{{Title}}</h4> 

Я новичок в ui.router, и ошибка происходят из маршрута конфигурации. Спасибо за любую помощь

+0

Заменить ('loginController'); ' – Rakeschand

ответ

0

Когда вы используете инъекции, это не способ сделать это.

Если функция отделена от account.controller, используйте $inject:

account.controller('loginController', loginController); 

... 

loginController.$inject = ['$scope']; 
function loginController($scope) { 
... 
} 

Прямой впрыск используется только, когда тело находится внутри account.controller.

account.controller('loginController', ['$scope', function($scope) { 
... 
}]); 

Кроме того, кажется, ваш файл account.js имеет недопустимый IIFE - (function(){...}); вместо (function(){...})();

+0

Спасибо, Он работает, когда я меняю это (функция() {.. .}); функционировать(){...})(); Это как раз о IIFE, а не в инъекции, но ваш ответ помогает мне заставить его работать :) –

+0

Бит инъекции также важен. В противном случае, если вы уменьшите свой код, он может сломаться. – cst1992

+0

Спасибо за подсказку, я уже знаю о проблеме инъекций, когда minify js files –

0

Я думаю, вам нужно удалить $ рамку из декларации контроллера, как указано ниже:

(function() { 
    'use strict'; 
    var account = angular.module('account'); 
    account.controller('loginController', loginController); 
    function loginController($scope) { 
     $scope.Title = 'login'; 
    }; 
}); 
Смежные вопросы