2013-05-09 2 views
2

Я следовал вместе с AngularJS Основы В 60-иш минут учебникAngular.JS безуспешно пытается загрузить представление с помощью метода HTTP OPTIONS

http://www.youtube.com/watch?v=i9MHigUZKEM

я делал хорошо, пока я не получил 52 минуты, когда репетитор проверяет приложение. На этом этапе приложения мы пытаемся загрузить представление. Когда я попытался загрузить свое приложение, я ничего не увидел в своем окне. Я открыл Chrome Dev Tools> Network и увидел, что статус для View1.html, который должен был быть загружен, был Load Cancelled. Я также заметил, что Angular попытался назвать это методом OPTIONS. Вот скриншот:

enter image description here

В моей попытке решить эту проблему, я наткнулся на этот SO вопрос

AngularJS performs an OPTIONS HTTP request for a cross-origin resource

и сходство с моей проблемой было то, что Угловая использует OPTIONS, чтобы получить данные. Разница заключалась в том, что в этом случае Angular получал ресурс кросс-происхождения. Так что это имеет смысл, но не в моем случае. Все, что я пытался сделать, это загрузить представление, которое было расположено в моей системе. Вот структура каталога моей AngularApp папок расположены на моем Ubuntu 12.10 рабочего стола:

. 
├── app.html 
├── Partials 
│   ├── View1.html 
│   └── View2.html 
└── scripts 
    └── angular.js 

URL, который я использую для просмотра моего приложения является

file:///home/max/Desktop/AngularApp/app.html

Что я делаю не так?

Вот app.html код:

<!DOCTYPE HTML> 
<html data-ng-app="demoApp"> 
<head> 
    <title>App</title> 
</head> 
<body>          
    <div> 
    <!-- Placeholder for views --> 
    <div data-ng-view=""></div> 
    </div> 
    <script src="scripts/angular.js"></script> 
    <script> 
    var demoApp = angular.module('demoApp', []); 

    demoApp.config(function ($routeProvider) { 
     $routeProvider 
     .when('/view1', 
       { 
       controller: 'SimpleController', 
       templateUrl: 'Partials/View1.html' 
       }) 
     .when('/view2', 
       { 
       controller: 'SimpleController', 
       templateUrl: 'Partials/View2.html' 
       }) 
     .otherwise({ redirectTo: '/view1' }); 
    }); 


    demoApp.controller('SimpleController', function ($scope) { 
     $scope.customers = [ 
     { name: 'Hasbro Meclan', city: 'New South Rolly' }, 
     { name: 'Haley Meclan', city: 'New South Rolly' }, 
     { name: 'Sammy Watson', city: 'New South Rolly' }, 
     { name: 'Sammy Warboy', city: 'Onice City' } 
     ]; 

     $scope.addCustomer = function() { 
     $scope.customers.push(
      { 
      name: $scope.newCustomer.name, 
      city: $scope.newCustomer.city 
     }); 
     }; 

    }); 
    </script> 


</body> 
</html> 

А вот View1.html

<div class="container"> 
    <h2>View 1</h2> 
    Name: 
    <br/> 
    <input type="text" data-ng-model="filter.name" /> 
    <br/> 
    <ul> 
    <li data-ng-repeat="cust in customers | filter:filter.name | orderBy:city"> 
    </ul> 
    <br/> 
    Customer Name:<br/> 
    <input type="text" data-ng-model="newCustomer.name" /> 
    <br/> 
    Customer City:<br/> 
    <input type="text" data-ng-model="newCustomer.city" /> 
    <br/> 
    <button data-ng-click="addCustomer()">Add Customer</button> 
    <br/> 
    <a href="#/view2">View 2</a> 
</div> 

ответ

1

Это не angularJS проблемы, а CORS проблемы - загрузка ресурсов с компьютера считается " cross-origin-like ", так как нет сервера (а именно, его происхождение браузера, вероятно,« null »). Как сказал Маркосеу, использование сервера - путь - python и node.js имеют очень простые реализации, но я бы порекомендовал вам, что вы попробуете yoman (http://www.yeoman.io). Это интегрированное решение для работы с js webapps и отлично работает с angularJS. (Я думаю, что главная страница сайта YEOMAN имеет angularJS в качестве примера)

Редактировать после комментария

Я ручаюсь за Yeoman, как я использую его для всех моих проектов - как некоторые из разработчиков в команде angularJS активно работают над генераторами-йомами, он имеет много преимуществ и обязательно следует всем обычным методам углового. Но следует отметить, что йомен делает гораздо больше, чем просто локальный http-сервер.Он контролирует строительные леса, тестирует (как в тестовой разработке, а не только на просмотр файлов на локальном сервере) и создает приложение (минимизирует и конкатенирует, обрабатывает зависимости и т. Д.)

Это очень полно и, как таковой, может быть довольно сложным (особенно когда у вас есть особые требования к задачам сборки). Но если вы собираетесь развернуть одно или несколько приложений angularJS, это может быть огромной помощью!

+0

Как вы это делаете? Вы используете Йомен? – 2013-05-09 18:03:14

+0

Да - Yeoman подделывает проекты (используя структуру в угловом семени, которая является «стандартом»), упрощает зависимости от других js-приложений/плагинов/фреймворков и ужасно упрощает тестирование (что означает просмотр предварительных результатов через js-сервер) , Кроме того, он отлично подходит для работы с sass-lang, который я использую. –

+0

приятно, да я тоже использую Sass. Я установил его и начну его проверять. Благодаря! – 2013-05-09 20:38:08

0

Я часто странные проблемы с проточной AngularJS код, проходящий через файл: //. Если у вас есть питон, вы можете попытаться запустить простой веб-сервер в корневом каталоге приложения с помощью:

cd /home/max/Desktop/AngularApp/ 
python -m SimpleHTTPServer 
+0

Это как вы это делаете? – 2013-05-09 18:02:56

+0

Всякий раз, когда мне нужен быстрый и грязный веб-сервер, да. Фактически, я создаю псевдоним, называемый webserver, поэтому мне не нужно запоминать синтаксис. – marcoseu