2013-04-27 16 views
33

Tôi chỉ đang học Angularjs và cách sử dụng templateUrl để tải mẫu.Không thể tải mẫu sử dụng templateUrl trong Angularjs

Tôi có một chỉ thị đơn giản:

var mainApp = angular.module("mainApp", []); 

mainApp.directive("request", function() { 
    return { 
     restrict: "E", 

     scope: { 
      data: "@" 
     }, 
     templateUrl: "te.html" 
    } 
}) 

tôi cố gắng sử dụng các chỉ thị như thế này:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="js/jquery-2.0.0.js"></script> 
     <script src="js/angular.js"></script> 

     <link href="css/bootstrap.css" rel="stylesheet" /> 
     <script src="js/bootstrap.js"></script> 

     <script src="js/main.js"></script> 

     <style type="text/css"> 
      div { 
       background-color: cornflowerblue; 
      } 

      #appPanel { 
       width: 900px; 
       height: 1000px; 
      } 

     </style> 
    </head> 
    <body> 
     <div id="appPanel" ng-app="mainApp" class="container"> 
      <div class="row-fluid" style="height: 15%"> 
       <div class="span12"> 
        title 
       </div> 
      </div> 
      <div class="row-fluid" style="height: 85%"> 
       <div class="span3" style="height: 100%"> 
        actions 
       </div> 
       <div class="span9" style="height: 100%" ng-controller="AppCtrl"> 
        <div ng-repeat="request in data.requests"> 
         <request data="request"></request> 
        </div> 
       </div> 
      </div> 
     </div> 
    </body> 
</html> 

Khi tôi mở trang web của tôi, tôi đã ngoại lệ này:

XMLHttpRequest cannot load file:///Users/chenguangli/Documents/workspace-web/ournotes/te.html. Origin null is not allowed by Access-Control-Allow-Origin. default.html:0 
Error: Failed to load template: te.html 
    at Error (<anonymous>) 
    at file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:4503:17 
    at file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:8898:11 
    at wrappedErrback (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:6806:57) 
    at file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:6882:53 
    at Object.Scope.$eval (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:8011:28) 
    at Object.Scope.$digest (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:7876:25) 
    at Object.Scope.$apply (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:8097:24) 
    at done (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:9111:20) 
    at completeRequest (file:///Users/chenguangli/Documents/workspace-web/ournotes/js/angular.js:9274:7) js/angular.js:5704 
    js/angular.js:5704 
    js/angular.js:4800 
    wrappedErrback js/angular.js:6808 
    js/angular.js:6882 
    Scope.$eval js/angular.js:8011 
    Scope.$digest js/angular.js:7876 
    Scope.$apply js/angular.js:8097 
    done js/angular.js:9111 
    completeRequest js/angular.js:9274 
    xhr.onreadystatechange js/angular.js:9244 

Tôi không cố gắng tải tên miền tập tin mẫu cho chắc chắn (te.html là trong cùng một lần, nơi default.html là).

Có ai có thể giúp tôi tìm ra điều gì đang xảy ra không?

Trả lời

68

Sự cố là bạn đang chạy ví dụ của mình khỏi hệ thống tệp (sử dụng giao thức file://) và nhiều trình duyệt (Chrome, Opera) hạn chế các cuộc gọi XHR khi sử dụng giao thức file://. AngularJS mẫu được tải xuống thông qua XHR và điều này, kết hợp với việc sử dụng các kết quả giao thức file:// trong lỗi bạn đang nhận được.

Bạn đã có một vài lựa chọn khi nói đến giải quyết tình trạng này:

+0

cảm ơn ~~ Tôi cũng phát hiện ra rằng vì tôi đang sử dụng WebStorm, tôi thực sự có thể khởi chạy trang như trong máy chủ web tích hợp –

+0

Đề xuất tuyệt vời để sử dụng thẻ tập lệnh. Đã lưu cho tôi một số rắc rối cho một dự án đơn giản. –

+0

nếu tôi đang chạy từ điện thoại di động thì sao? dự án của tôi sử dụng cordova, ví dụ: –

3

Chrome không cho phép yêu cầu ajax trên giao thức file:.

Hãy xem: Google Chrome --allow-file-access-from-files disabled for Chrome Beta 8 để giải quyết sự cố hoặc bạn có thể chạy máy chủ web trên máy tính của mình.

+0

cảm ơn ~~ Tôi cũng đã tìm ra nó.nhân tiện, tôi tìm thấy liên kết này [http://blog.jetbrains.com/webide/2013/03/built-in-server-in-webstorm-6/], vì tôi đang sử dụng WebStorm, tôi có thể khởi chạy trang web của mình là một máy chủ web cục bộ –

+0

Và đây là vấn đề chromium vui chơi (1055 sao ...): https://code.google.com/p/chromium/issues/detail?id=47416&can=5&colspec=ID%20Pri%20M% 20Iteration% 20ReleaseBlock% 20Cr% 20Status% 20Owner% 20Summary% 20OS% 20Modified – Guillaume86

+0

vì vậy nếu tôi có một máy chủ đang chạy trong thư mục với dự án của tôi, templateUrl của tôi sẽ trông như thế nào? Ngay bây giờ tôi có 'directives/filename.html' – broderickga

14

Nếu bạn có Node và NPM được cài đặt sau đó chạy: NPM cài đặt http-server -g

Sau đó điều hướng đến thư mục chứa ứng dụng của bạn và chạy: http-server

Tôi tìm thấy tôi trả lời trong này SO bài: Quick Node Server

Bạn có thể tải Node đây (NPM đi kèm với Node): Node

Hy vọng điều này sẽ hữu ích!

+0

Cách siêu nhanh để phục vụ dự án của bạn nếu bạn đã cài đặt nút. Làm việc cho tôi trên môi trường cửa sổ của tôi :) Chỉ cần reloade dự án của tôi và tất cả mọi thứ đã làm việc. Tôi đã gặp vấn đề tương tự mà nó góc cạnh sẽ không lấy các tập tin địa phương cho url mẫu. – rekordboy

+0

vì vậy nếu tôi có một máy chủ đang chạy trong thư mục với dự án của tôi, templateUrl của tôi sẽ trông như thế nào? Ngay bây giờ tôi có 'chỉ thị/filename.html' – broderickga

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