2013-06-24 30 views
23

Tôi đang cố khởi động quá trình dự án angular.js. Đây là index.html của tôi:Angular.js: Lỗi không bắt buộc, không có mô-đun: myapp

<!doctype html> 
<html ng-app="myapp"> 
<head> 
    <meta charset="utf-8"> 
    <base href="{% url 'app' %}" /> 

    <title>Project</title> 
</head> 
<body> 
    <div ng-view> 
     <p>Loading...</p> 
    </div> 

    <script> 
     var url = function(path) { return '{{ STATIC_URL }}' + path }; 
    </script> 
    <script src="{{ STATIC_URL }}js/jquery-1.10.1.js"></script> 
    <script src="{{ STATIC_URL }}js/angular.js"></script> 
    <script src="{{ STATIC_URL }}js/project/app.js"></script> 
    <script src="{{ STATIC_URL }}js/project/controllers.js"></script> 
</body> 
</html> 

Các url 'app' trên đầu chỉ đơn giản là in các subpath,/app, ví dụ. Đây là app.js tôi:

'use strict'; 

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

app.config(['$routeProvider', function($router) { 
    $router.when('/', { 
     templateUrl: url('partials/foo.html'), 
     controller: controllers.Foo 
    }); 
}]); 

Vấn đề là mỗi lần tôi cố gắng chạy nó, một ngoại lệ được nâng lên: Uncaught Error: No module: myapp, và đây là gần như cùng một cách angular-seed công trình. Tôi đã tìm kiếm trên Google và StackOverflow nhưng không có câu trả lời nào (onetwo) đã giúp tôi.

Đây là số fiddle về lỗi của tôi (bạn nên mở bảng điều khiển của trình duyệt để xem). Có chuyện gì vậy?

+0

Bạn có thể tạo ra một câu đố tái tạo sự cố không? – Blackhole

+0

@Blackhole, đây là [đây] (http://jsfiddle.net/vvfnN/). Tôi đã cố gắng hết sức để đặt nó trên jsFiddle (mở bảng điều khiển của bạn để xem vấn đề). –

+0

Tôi nghĩ rằng biến STATIC_URL của bạn không được xác định. Nó nằm ngoài phạm vi góc cạnh, vì vậy bạn không thể sử dụng {{}}. Hãy thử sử dụng một chuỗi liên tục cho src của bạn thay vì một biến góc. –

Trả lời

40

Trình tự kịch bản của bạn là rất quan trọng, hãy thử đặt nó trong bạn <head>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
<script> 
    var app = angular.module('myapp', []); 

    app.controller('Ctrl', function($scope){ 
     $scope.variable = "Hello"; 
    }); 
</script> 
<body ng-app="myapp"> 
    <div ng-controller="Ctrl"> 
     <p>{{variable}}</p> 
    </div>  
</body> 

Hãy thử nó ở đây:

http://jsfiddle.net/vvfnN/2/

10

Bổ sung AlexCheuk 's câu trả lời, tôi nhận ra rằng ứng dụng của tôi .js tệp đã tham gia đóng cửa:

(function($) { 
    'use strict'; 

    // all angular.js stuff 
)(jQuery); 

Loại bỏ các đóng cửa nó làm việc (mà không thay đổi các đơn đặt hàng như Alex nói)! Tôi không biết tại sao, nhưng đó là ok.

+6

@lsmagalhaes, lý do loại bỏ lời gọi sẵn sàng của jQuery đã khắc phục được sự cố của bạn là Angular sẽ khởi động trên sự kiện DOMContentLoaded, xảy ra cùng một sự kiện mà jQuery gọi trình xử lý sẵn sàng của nó. Điều đang xảy ra là Angular sẽ khởi động và tìm mô-đun của bạn dựa trên giá trị của ng-app, nhưng vì trình xử lý sẵn sàng jQuery chưa chạy, mô-đun sẽ chưa được tạo. Đó là lý do tại sao bạn nhận được lỗi "Lỗi không bắt buộc: Không có mô-đun: myapp'. – dskang

+1

Điều này thực sự có vẻ là câu trả lời. trên jsFiddle, chỉ cần tải angularjs trên "no-wrap -in head" hoặc "no-wrap -in body" và lỗi đã biến mất. cảm ơn. –

-4

Tôi đã gặp sự cố tương tự ở đó, trong khi chạy máy chủ Yeoman/grunt. Điều gì đã sửa cho tôi, đã khởi động lại máy chủ grunt.

+1

Điều này không liên quan gì đến vấn đề này. –

0

Trong trường hợp của tôi khi sử dụng ký hiệu IIFE, tôi quên tự gọi các dấu ngoặc đơn.

(function() { 
    angular.module("adminApp", []); 
}() //don't forget self invoke parentheses 
); 
+0

* quên xin vui lòng, RIP tiếng Anh – Xsmael

+0

cảm ơn người đàn ông, bây giờ tiếng Anh tăng – Erkan

2

tôi phải đối mặt với cùng một vấn đề nhưng không ai trong số các trick ở trên làm việc cho tôi nhưng lần này, xem các thiết lập trong hình ảnh

Thay đổi từ "onload" thành "Không quấn -"

enter image description here

+0

câu trả lời rất tốt .. điều này là làm việc cho tôi ,, thanks .... u có thể giải thích ý nghĩa của Không quấn trong là gì – user3501613

0

tôi đã phải đối mặt với cùng một lỗi nhưng tôi đã làm một sai lầm ngớ ngẩn, tôi đã không bao gồm tệp controller.js trong trang jsp của mình. chỉ bao gồm này:

<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/controller.js"></script>

và nó làm việc xuất sắc.

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