当前位置: 首页 > 面试题库 >

无法在Angularjs中使用templateUrl加载模板

干亮
2023-03-14
问题内容

我只是在学习Angularjs,以及如何使用templateUrl加载模板。

我有一个简单的指令:

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

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

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

我尝试使用这样的指令:

<!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>

打开页面后,出现以下异常:

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

我没有确定要跨域加载模板文件(te.html与default.html处于同一折叠)。

有人可以帮我弄清楚发生了什么吗?


问题答案:

问题是您正在使用文件file://协议(使用协议)运行示例,并且许多浏览器(Chrome,Opera)在使用file://协议时都限制了XHR调用。AngularJS模板是通过XHR下载的,再加上file://协议的使用会导致出现错误。

解决这种情况时,您有几种选择:

  • 使用网络服务器运行示例(有许多简单的解决方案,例如https://code.google.com/p/mongoose/或几行node.js脚本)
  • 使用以下<script>指令将模板嵌入到index.html文件中:http : //docs.angularjs.org/api/ng.directive : script,因此您的模板随主HTML文件一起下载,不再需要通过XHR加载它们
  • 更改浏览器设置,以允许通过file://协议进行XHR调用。例如,可以在Chrome中这样进行操作:允许Google Chrome使用XMLHttpRequest从本地文件加载URL


 类似资料:
  • 我正在学习Angularjs,以及如何使用templateUrl加载模板。 我有一个简单的指令: 我尝试使用这样的指令: 一旦我打开我的页面,我得到了这个例外: 我没有尝试跨域加载模板文件(te.html与default.html位于同一文件夹中)。 谁能帮我弄清楚发生了什么事?

  • 本文向大家介绍AngularJS模板加载用法详解,包括了AngularJS模板加载用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS模板加载用法。分享给大家供大家参考,具体如下: angular模板加载 ----ng-template AngularJS作为mvc(或者说mvvm)框架,同样具备模板这一基本概念。 NG加载模板的顺序为 内存加载---AJAX加载。

  • 问题内容: 我正在尝试将CS​​V文件加载到AngularJS中,以便可以对内容进行一些操作。它不是我想要的那样工作。为了测试它是否正确加载,我将其加载到文本区域中以查看内容。 当我加载文件时,它说它已正确加载,但在加载第二个CSV文件之前似乎没有触发onload()事件,在这种情况下,FIRST文件显示在文本区域中。 HTML: JS: 当我将其放入JSFiddle时,该文件根本不会出现在tex

  • 我对使用Dropwizard和Freemarker模板非常陌生。我正在尝试加载免费标记模板。但是,图像不会加载到正在显示的页面中 我使用html的标准img标记来显示图像 这些图像在jar文件中可用。 以下是该项目的结构 src |-main |--resources |--media |--images |--mload。巴布亚新几内亚 请让我知道如果我错过了任何显示图像

  • 问题内容: 我们的应用程序具有2级导航。我们想使用AngularJS 动态地向提供模板。我正在考虑做一些类似的事情: 我只是不知道该如何填充。我知道primaryNav和secondaryNav绑定到$ routeParams,但是如何在这里访问$ routeParams以便动态提供模板? 问题答案: 我找不到注入和使用该服务的方法(我认为这是一个更好的解决方案),我尝试过这种想法,认为它可能会起

  • 问题内容: 因此从Angular 1.1.4开始,您可以拥有一个动态模板网址。从这里, templateUrl-与模板相同,但是从指定的URL加载模板。由于模板加载是异步的,因此在加载模板之前,将暂停编译/链接。 您可以将templateUrl指定为表示URL的字符串,或者指定为使用两个参数tElement和tAttrs(在下面的编译函数api中进行描述)并返回表示URL的字符串值的函数。 我如何