2013-03-29 5 views
3

Аналогичный вопрос был задан here, но это мне не помогло.Контроллер angularjs выполняет дважды

Я изучаю angularjs, и я заметил, что контроллер выполняется дважды.

У меня есть очень простой скрипку пример, который показывает поведение here

я построил пример, как я узнавал об услугах, и сначала я думал, что это впрыскивание услуг в контроллер, но я заметил, все код, связанный с услугами, и все еще контроллер выполняется дважды.

Мой пример работает, но я боюсь, что я делаю что-то неправильно.

<div ng-app="MyApp"> 
    <div ng-controller="MyCtrl"> 
    {{data1}} 
    </div> 
</div> 

var app = angular.module('MyApp', []) 
app.service('Service1', function(){ 
    return { 
    ajxResponse1: 'dataFromService1' 
    }; 
}); 

function MyCtrl($scope, Service1){ 
    alert('Entering MyCtrl'); 
    $scope.data1 = Service1.ajxResponse1;  
    alert('Exiting MyCtrl'); 
} 

ответ

4

Ваш контроллер был запущен дважды в скрипку, потому что угловая упоминается дважды (один раз через рамочные & Extensions выпадающие и еще как внешних ресурсов).

См. Это updated fiddle, где я удалил Внешний ресурс, и оповещения появляются только один раз.

Код остается неизменным:

function MyCtrl($scope, Service1, Service2, Service3){ 
    alert('Entering MyCtrl'); 
    $scope.data1 = Service1.ajxResponse1; 
    $scope.data2 = Service2.ajxResponse2; 
    $scope.data3 = Service3.ajxResponse3; 
    alert('Exiting MyCtrl'); 
} 
+0

Спасибо Gloopy Я тоже новичок в Fiddle.. – user2223142

24

Одним из возможных источников заключается в следующем: если вы используете маршрутизации и указать контроллер в маршруты - вы не должны указывать его в шаблон, который использует маршрут. У нас была эта проблема, когда это было упущено.

+1

отличный крик, это была именно проблема для меня – iancrowther

+0

Вы не хотите добавить 'ng-controller =' внутри HTML-шаблона? У меня такая же проблема –

+0

Ок, да, похоже, что это проблема ... –

1

У меня была аналогичная проблема, и это произошло из-за косых черт в моей маршрутизации.

У меня было что-то вроде/post {slug: [a-z0-9 -] * /} для моего маршрута, и при посещении страницы на домене.com/post он перенаправлял версию с косой чертой на конце ,

Принял меня для того, чтобы это исправить!

Редактировать: На самом деле, просто более подробно рассмотрел ваш код и заметил, что там нет маршрутизации, так что это, вероятно, не причина в вашем случае.

Может быть полезным для таких людей, как я, которые искали другое решение.

+0

как вы решили эту проблему? –

0

Для всех людей, использующих рельсы и angularjs:

Фреймворка рельсов, переводящего URLS для взглядов и нагрузок их столкновение с angularjs $ маршрута, даже если у вас есть приложение одного вида.

Для предотвращения двойной загрузки контроллера: перейти к application.js и удалить «// = требуется turbolinks

Добро пожаловать

Смежные вопросы