4

В моем угловом проекте пользователь принимает EULA, а затем автоматически перенаправляется на свою панель управления, однако при этом перенаправлении DashboardController, кажется, вызывается дважды, DashboardController вызывается на сам маршрут, я проверил, не случайно ли я вызвал его в шаблоне, но я не был. Ниже мой маршрут & контроллер. Кажется, не имеет значения, могу ли я напрямую обращаться к URL-адресу или перенаправлять на контроллере EULA, я получаю тот же результат.Контроллер, вызываемый дважды в Ionic (AngularJS)

Маршруты

.config(function($httpProvider, $stateProvider, $urlRouterProvider) { 

    $httpProvider.interceptors.push('httpRequestInterceptor'); 

    $urlRouterProvider.otherwise('/'); 

    $stateProvider 

    .state('login', { 
     url: '/', 
     templateUrl: 'templates/login.html', 
     data: { 
      requireLogin: false 
     } 
    }) 
    .state('eula', { 
     url: '/eula', 
     templateUrl: 'templates/eula.html', 
     data: { 
      requireLogin: true 
     } 
    }) 
    .state('dashboard', { 
     url: '/groups', 
     templateUrl: 'templates/dashboard.html', 
     data: { 
      requireLogin: true 
     } 
    }) 
}); 

Контроллер:

App.controller('DashboardController', ['$scope', 'RequestService', '$state', '$rootScope', function($scope, RequestService, $state, $rootScope){ 

alert('test'); 

}]); 

Любые идеи?

ДОБАВЛЕНО МОЕ HTML СОГЛАСНО КОММЕНТАРИИ

index.html

<body ng-app="App"> 

<ion-nav-bar class="bar-positive nav-title-slide-ios7" align-title="center"> 
     <ion-nav-back-button class="button-icon ion-arrow-left-c"></ion-nav-back-button> 
    </ion-nav-bar> 
    <ion-nav-view class="slide-left-right"></ion-nav-view> 
    <ui-view></ui-view> 
</body> 

dashboard.html

<div class="groups" ng-controller="DashboardController"> 
    <ion-view title="App"> 

     <ion-nav-buttons side="right"> 
      <a ui-sref="groupcreate"><span class="icon ion-ios-plus-outline"></span></a> 
     </ion-nav-buttons> 

     <ion-content class="padding"> 
      <div class="row"> 
       <div class="col-50" ng-repeat="group in groups"> 
        {{ group }} 1 
       </div> 
      </div> 
     </ion-content> 
    </ion-view> 
</div> 
+0

может быть, вы просто включал .js дважды в вашем HTML-источника случайно ? –

+0

Спасибо, но я проверил это, и это, похоже, не так, я также использую другие контроллеры, например LoginController, но это только один раз вызывается, я не 100%, но может ли это что-то сделать? с маршрутизацией? – ChrisBratherton

+0

может быть много причин для этого. Это случилось со мной на прошлой неделе, и это было потому, что я использовал ионный сигнал, и контроллер был прикреплен к дому. Он также запускался в маршрутизации. Если вы предоставите свой html тоже, это может быть причиной. см. этот пост для списка возможных решений - http://stackoverflow.com/questions/15535336/combating-angularjs-executing-controller-twice –

ответ

5

ИТАК после долгой отладки времени и проверить вещи, я узнал, что это был вопрос, связанный с навигационной панели в ионной, по существу, я звоню <ui-view></ui-view> & <ion-nav-view></ion-nav-view> на той же странице, так что в основном удвоению мои взгляды, которые, в свою очередь, дважды вызывали диспетчера.

8

Если вы используете ui-router у вас нет использовать ng-controller. Вы использовали его в своем dashboard.html, другой генерируется ui-router - вот почему он попал дважды.

+0

Как вы можете видеть в приведенном выше примере маршрутов, я вызываю его только один раз в представлении панели. Я удалил его с маршрута, чтобы попробовать его, кажется, что, как бы я его ни называл, его запустить дважды. – ChrisBratherton

+0

@SeriousJelly - я имел в виду удаление 'ng-controller =" DashboardController "из dashboard.html - при доступе к вашему маршруту панели управления контроллер вызывается дважды, потому что он находится в шаблоне HTML и автоматически генерируется' ui-router'. – Kamo

+1

Хорошо, попробовал теперь ничего не загружать, конечно же, ui-router не знает, какой контроллер я хочу использовать в этом шаблоне, если я не укажу его в самом маршруте или в представлении (не для обоих). – ChrisBratherton

1

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

Мои контроллеры также вызывается дважды, но в моем случае я должен был закомментируйте ng-controller настройки в различных файлах:

Моя функция конфигурации в основном app.js

.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
     .state('splash', { 
      url: "/", 
      templateUrl: "app/splash/splash.html" 
      // controller: 'SplashCtrl' 
     }) 

Так как я уже называла его в разметке:

<ion-view view-title="TickerTags" ng-controller="SplashCtrl as splash"> 
    <ion-content class="splash"> 

Ключевой контроллер внутри моих директив

angular 
    .module('tagsPanelDirective', []) 
    .controller('TagsPanelCtrl', TagsPanelCtrl) 
    .directive('tagsPanel', tagsPanel); 

function tagsPanel() { 
    var directive = { 
     templateUrl: "app/tags/tagsPanel.html", 
     restrict: "E", 
     replace: true, 
     bindToController: true, 
     // controller: 'TagsPanelCtrl as tagsPanel', 
     link: link, 
     scope: false 
    }; 
    return directive; 
    function link(scope, element, attrs) {} 
} 

снова, так как я уже называла его внутри шаблона разметки:

<section class="tags-panel" ng-controller="TagsPanelCtrl as tagsPanel"> 
Смежные вопросы