2013-11-01 16 views
8

Tôi biết các biến thể của câu hỏi này đã được hỏi nhiều lần, nhưng tôi đã thử một số giải pháp được đề xuất cho các OP khác, có thể giải quyết vấn đề này và sẽ đánh giá cao một số giải thích rõ ràng.AngularJS/Jade Lỗi: Argument 'MyController' không phải là một hàm, không xác định (MEAN)

Tôi đang làm việc với ứng dụng danh sách việc cần làm trung bình cơ bản (http://www.mean.io/). Sau khi thực hiện một bộ điều khiển đơn giản tôi đang chạy vào "Error: Argument" nameOfMyController 'không phải là một chức năng, có undefined. "

Đây là nơi tôi tại địa chỉ:

app.js (soạn sẵn)

window.app = angular.module('mean', ['ngCookies', 'ngResource', 'ui.bootstrap', 'ui.route', 'mean.system', 'mean.articles' ]); 

angular.module('mean.system', []); 
angular.module('mean.articles', []); 

tôi đã cố gắng thay đổi những gì đang tham chiếu ở đây, như thế nào, ví dụ, thêm mean.controller để mảng nhưng rõ ràng là không đúng cách để làm điều đó bởi vì nó cho tôi biết module không tồn tại.

đây là taskController.js của tôi (một hướng dẫn có nghĩa là tôi theo sau làm taskController một chức năng độc lập nhưng tôi tuyên bố nó như là một nhà xây dựng cách docs góc nói đến)

var mean = angular.module('mean',[]); 

mean.controller('taskController', function taskController($scope){ 

    $scope.todos = []; 

    $scope.doneFilter = { done : true }; 
    $scope.notDoneFilter = { done : false }; 

    $scope.setTodos = function(todos){ 
     $scope.todos = todos; 
    }; 

}); 

Tôi cũng đã cố gắng angular.module ('mean.system') điều khiển ('taskController', chức năng taskController ($ phạm vi) {...}, kết quả tương tự

ok ngay bây giờ cho các quan điểm:.. bao gồm ng-ứng dụng trong default.jade

!!! 5 
    html(ng-app='mean', lang='en', xmlns='http://www.w3.org/1999/xhtml', xmlns:fb='https://www.facebook.com/2008/fbml', itemscope='itemscope', itemtype='http://schema.org/Product') 
    include ../includes/head 
    body 
    ... 
    include ../includes/foot 

sau đó trong index.jade tôi có:

extends layouts/default 

block head 
    script(type='text/javascript', src='/js/controllers/taskController.js') 

block content 
    section(data-ng-view) 
    div.container(ng-controller="taskController", ng-init="setTodos(#{JSON.stringify(todos)})") 
    ... 
    div.row(ng-repeat="todo in todos | filter:notDoneFilter") 
    label.checkbox 
     input(type="checkbox", ng-model="todo.done") 
     | {{ todo.description }} 
    span.datestring 
     i {{ todo.due | date: 'MMM d, yyyy' }}  
    ... 
    div.row(ng-repeat="todo in todos | filter:doneFilter") 
    label.checkbox 
     input(type="checkbox", checked="true") 
     del {{ todo.description }} 
     span.datestring 
     i {{ todo.due | date: 'MMM d, yyyy' }} 

foot.jade chèn:

//AngularJS 
script(type='text/javascript', src='/lib/angular/angular.js') 
script(type='text/javascript', src='/lib/angular-cookies/angular-cookies.js') 
script(type='text/javascript', src='/lib/angular-resource/angular-resource.js') 

Tôi không nghĩ Tôi đang thiếu bất kỳ chỉ thị góc và bộ điều khiển bản thân nên làm việc, vì vậy Tôi giả định đây là một vấn đề kiến ​​trúc ứng dụng cơ bản mà tôi không hiểu cách mọi thứ phù hợp với nhau. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

30

Lỗi này chủ yếu xảy ra khi angularj không thể định vị bộ điều khiển trong bất kỳ mô-đun nào. Điều này có thể xảy ra khi bạn vô tình xác định lại mô-đun. Trong trường hợp của bạn tôi thấy rằng

window.app = angular.module('mean', ['ngCookies', 'ngResource', 'ui.bootstrap', 'ui.route', 'mean.system', 'mean.articles' ]);

và sau đó

var mean = angular.module('mean',[]);

Cú pháp này xác định lại mô-đun.

Để lấy mô-đun hiện tại bằng cách sử dụng angular.module('mean') mà không có tham số thứ hai.

+0

Cảm ơn bạn, tôi đã gặp hai vấn đề. Cái bạn đã xác định chính xác là cái đầu tiên. Sử dụng angular.module ('mean'). Controller ('taskController', function taskController ($ scope) {...} và loại bỏ định nghĩa thứ hai của tôi về module đã giải quyết lỗi chức năng undefined.Tôi cũng đã có một khoảng cách/nhận dạng bị thiếu trong index.jade của tôi (ng-repeat cần thiết trong vòng khai báo ng-controller/ng-init). Sửa cả hai đều có mọi thứ hoạt động chính xác. –

+0

Bạn vừa tiết kiệm cho tôi số giờ đau. Cám ơn rất nhiều. –

1

Tôi vừa gặp sự cố này ngay bây giờ. Tôi đã thử tất cả các đề xuất ở trên và không có gì hiệu quả. Sau đó, tôi hạ cấp AngularJS từ phiên bản 1.3.9-build.3746 xuống phiên bản 1.2.8. Đó là những gì tôi nhận được khi sử dụng các phiên bản beta.

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