2014-10-24 15 views
7

Tôi đã đoạn mã sau vào ứng dụng của tôi:điều khiển không được định nghĩa trong một ứng dụng nguyên cảo sau khi nâng cấp lên 1,3

angular.module('home', []) 
    .controller('homeHomeController', HomeHomeController) 
    .controller('homeContentController', HomeContentController); 

class HomeHomeController { 
    static $inject = [ 
     '$http', 
     'examService', 
     'stateService', 
     'userService' 
    ]; 
    constructor(
     private $http: ng.IHttpService, 
     private $es: IExamService, 
     private $ss: IStateService, 
     private $us: IUserService 
     ) { 
     var self = this; 
    } 
} 

Tôi chỉ nâng cấp lên AngularJS 1.3 và bây giờ tôi đang nhận này lỗi:

Error: [ng:areq] Argument 'HomeHomeController' is not a function, got undefined 
http://errors.angularjs.org/1.3.0/ng/areq?p0=HomeHomeController&p1=not%20aNaNunction%2C%20got%20undefined 
    at http://127.0.0.1:17315/Scripts/angular.js:80:12 
    at assertArg (http://127.0.0.1:17315/Scripts/angular.js:1610:11) 
    at assertArgFn (http://127.0.0.1:17315/Scripts/angular.js:1620:3) 
    at http://127.0.0.1:17315/Scripts/angular.js:8319:9 
    at http://127.0.0.1:17315/Scripts/angular.js:7496:34 
    at forEach (http://127.0.0.1:17315/Scripts/angular.js:343:20) 
    at nodeLinkFn (http://127.0.0.1:17315/Scripts/angular.js:7483:11) 
    at compositeLinkFn (http://127.0.0.1:17315/Scripts/angular.js:6991:13) 
    at publicLinkFn (http://127.0.0.1:17315/Scripts/angular.js:6870:30) 
    at compile (http://127.0.0.1:17315/Scripts/angular-ui-router.js:3335:9) 

Đây là cách tôi đang làm cấu hình bộ định tuyến:

app.config([ 
    '$httpProvider', 
    '$locationProvider', 
    '$sceProvider', 
    '$stateProvider', 
    appConfig 
]); 

function appConfig(
    $httpProvider, 
    $locationProvider, 
    $sceProvider, 
    $stateProvider: ng.ui.IStateProvider 
    ) { 

    $locationProvider.html5Mode(true); 

    .. 
    var home = { 
     name: 'home', 
     url: '/Home', 
     views: { 
      'root': { 
       templateUrl: '/Content/app/home/partials/home.html', 
      }, 
      'content': { 
       templateUrl: '/Content/app/home/partials/overview.html', 
      }, 
     } 
    }; 
    .. 
    $stateProvider 
     .. 
     .state(home) 
     ; 

Dưới đây là thứ tự của tải kịch bản của tôi:

<script src="Scripts/jquery-2.1.1.min.js"></script> 
<script src="/Scripts/angular.js"></script> 
<script src="/Scripts/angular-ui-router.js"></script> 
... 
<script src="/Content/app/home/controllers/HomeController.js"></script> 
<script src="/Content/app/home/home.js"></script> 

<script src="/Content/app/app.js"></script> 
<script src="/Content/app/appConfig.js"></script> 
<script src="/Content/app/appRun.js"></script> 

bất cứ ai có thể cho tôi biết nếu có sự cố khi với cách mà tôi đang định điều khiển của tôi sử dụng nguyên cảo?

+0

Cố gắng thêm xuất khẩu trước khi định nghĩa lớp –

+0

Đó có phải là một cái gì đó mới đến với 1,3? Tôi chỉ cố gắng quay trở lại v1.3.0-beta.8 và ứng dụng của tôi đang hoạt động. Đã đến 1,3 và nó lại đưa ra lỗi này. –

+0

Hoàn toàn ngẫu nhiên đoán dựa trên ngăn xếp cuộc gọi - là chức năng cấu hình router chạy trước khi khai báo lớp thực hiện? –

Trả lời

2

Mặc dù thực tế, mà bạn mô tả mà chỉ thay đổi là nâng cấp JS góc, tôi muốn cung cấp cho bạn một gợi ý, làm thế nào lỗi này có thể được sao chép. Tôi đi theo mô tả của bạn ở trên và tạo this broken plunker với định nghĩa trạng thái này:

var home = { 
    name: 'home', 
    url: '/Home', 
    views: { 
     'root': { 
      templateUrl: 'tpl.home.html', 
      controller: 'HomeHomeController', 
     }, 
     'content': { 
      templateUrl: 'tpl.overview.html', 
      controller: 'homeContentController', 
     } 
    } 
}; 

Và bởi vì định nghĩa điều khiển của góc (theo câu hỏi) là:

var app = angular.module('home', ['ui.router', 'services']) 
    .controller('homeHomeController', HomeHomeController) 
    .controller('homeContentController', HomeContentController); 

này nhận được lỗi:

Error: [ng:areq] Argument 'HomeHomeController' is not a function, got undefined 
http://errors.angularjs.org/1.3.0/ng/areq?p0=HomeHomeController&p1=not%20aNaNunction%2C%20got%20undefined 
... 

Vì vậy, có gì sai? controller: 'HomeHomeController',

views: { 
    'root': { 
     templateUrl: 'tpl.home.html', 
     controller: 'HomeHomeController', 

Nếu chúng tôi sửa chữa nó để controller: 'homeHomeController' (tên trường hợp lạc đà), tất cả mọi thứ đang làm việc

Đây là updated plunker với phiên bản làm việc

var home = { 
    name: 'home', 
    url: '/Home', 
    views: { 
     'root': { 
      templateUrl: 'tpl.home.html', 
      controller: 'homeHomeController', 
     }, 
     'content': { 
      templateUrl: 'tpl.overview.html', 
      controller: 'homeContentController', 
     } 
    } 
}; 
+0

cảm ơn đề xuất của bạn Tôi đã kiểm tra các tệp .html của mình và tôi đã tham khảo các bộ điều khiển như thế này: ng-controller = "HomeHomeController as home" .Điều này làm việc trước 1.3 nhưng với 1.3 tôi phải thay đổi thành ng- Tôi tự hỏi tại sao nó từng làm việc trước 1.3 nhưng điều tốt là bây giờ tôi nhìn thấy những sai lầm và tất cả đều làm việc được. Tôi sẽ chấp nhận câu trả lời của bạn –

+0

Tuyệt vời nếu điều đó đã giúp bằng cách nào đó ...;) –

0

Không thể kể câu hỏi của bạn, nhưng nguyên nhân có thể xảy ra nhất cho lỗi này là đặt hàng.

Có lẽ khi bạn nâng cấp phiên bản Angular, bạn đã di chuyển thẻ tập lệnh hoặc phiên bản mới của Angular có thời gian thực thi khác nhau một cách tinh tế (tức là nó được sử dụng để chờ onload và hiện tại không).

Đảm bảo bộ điều khiển của bạn được khai báo trước khi bạn gọi angular.module('home', [])....

Nếu hai khối mã bạn đã bao gồm trong các file khác nhau, chắc chắn rằng các tập tin chứa HomeHomeController được bao gồm trước khi các tập tin mà có cuộc gọi đến angular.module('home', [])...

+0

Phiên bản mới của Angular chỉ đơn giản là thay thế cũ vì vậy không có sự khác biệt đặt hàng trong index.html. Bộ điều khiển của tôi được nạp trước angular.module ('home' cũng vậy. Tôi nghĩ nó phải là một cái gì đó khác vì mã này đã làm việc với nhiều phiên bản của Angular cho đến bây giờ, ngay bây giờ nó rất lặp lại. Tại sao tôi quay trở lại bản beta nó hoạt động tốt Bạn có bất cứ ý tưởng nào về cách tôi có thể có thêm thông tin về lỗi này hay không.Thông thường các thông báo lỗi AngularJS cho tôi một ý tưởng nhưng không đủ thông tin để –

Các vấn đề liên quan