Запросы на кросс-начало поддерживаются только для HTTP
Я пытаюсь запустить этот код:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title>Exemple 06</title>
</head>
<body>
<!-- Diretiva ng-repeat -->
<div ng-controller="MyController">
<a ng-href="#/">Page 1</a> | <a ng-href="#/p2">Page 2</a>
<div ng-view="#/p2"></div>
</div>
<script src="js/angular.js"></script>
<script src="js/angular-route.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(function($routeProvider){
$routeProvider
.when('/' , {controller: 'MyController', templateUrl: 'p1.html'})
.when('/p2', {controller: 'MyController', templateUrl: 'p2.html'})
.otherwise({ redirectTo: '/'});
});
myApp.controller('MyController', function($scope){
$scope.nomes = [
{id: 1, nome: 'Arthur'},
{id: 2, nome: 'Portos'},
{id: 3, nome: 'Aramis'}
];
});
</script>
</body>
но появляется следующая ошибка:
XMLHttpRequest не может загрузить файл:///home/93579551515/Desktop/ Angular/p1.html. Запросы на кросс-начало поддерживаются только для HTTP.
Я не хочу запускать его на веб-сервере.
Ответы
Ответ 1
В index.html
вы можете добавить шаблоны, такие как p1.html
и p2.html
, помещая их в теги script
, как упомянутые в документах.
<script type="text/ng-template" id="p1.html">
This is the content of the template
</script>
Тогда angular
больше не потребуется делать запросы AJAX для их извлечения.
Обратите внимание, что эти элементы script
должны появляться после ng-app
.
Ответ 2
У меня такая же проблема в Chrome, если вы используете Chrome, вы можете отключить такую же политику происхождения в Chrome. Запуск запуска Chrome:
$ google-chrome --disable-web-security
Здесь подробнее.
Ответ 3
Поставщик маршрута использует протокол http, поэтому, если вы запустите этот код непосредственно из папки, вы получите проблему с перекрестным происхождением.
Храните свою папку на сервере, например localhost/route, и запустите ее.
Укажите ссылочный путь, например templateUrl: '/p1.html'