2016-11-15 3 views
1

Я пытаюсь использовать firebase 3 с моим ионическим приложением. (Я просто заставлял общаться, поэтому я считаю, что я мог бы сделать все правильно с самого начала, например, используя нотацию ControllerAs)controllerAs метод не вызывается, когда другие

все в контроллере отлично работает. просто метод logUserOut не срабатывает - вообще! Я в недоумении.

контроллер:

.controller('DashCtrl', function($scope, $ionicModal, DataService, AuthService) { 
    var ctrl = this; 
    ctrl.icons = []; 

    //// SERVICE GETS 
    ctrl.allIcons = DataService.icons(); 
    ctrl.pages = DataService.pages(); 
    //// 

    //// FILTER INFORMATION 
    ctrl.loadIcons = function() { 
    console.log(ctrl.pages) 
    for (icon in ctrl.allIcons) { 
     var i = ctrl.allIcons[icon]; 
     // console.log(i) 
     if(i.active){ 
     ctrl.icons.push(i); 
     } 
    } 
    }; 
    //// 


    //// ACTIONS 
    ctrl.logUserOut = function(){ 
    console.log('this is not being called') 
    // AuthService.logout(); 
    }; 
    //// 
}); 

HTML:

<ion-modal-view> 

<ion-pane > 
<ion-content scroll="false" > 
<section class = "modal-container"> 
    <div class="item modal-header"> 
     <button class="button button-left button-icon light ion-android-close" ng-click="ctrl.closeProfileModal()"></button> 
     <div class="light text-center"> 
      <button class="button button-clear" ng-click="controller.closeProfileModal()"> 
      <img class="avatar-modal" src="img/mike.png"> 
      </button> 
     </div> 
    </div> 
    <div class = "row modal-profile-row"> 
     <div class = "col"> 
      <button class="button button-clear"> 
      <span class="title light">Personal Info</span> 
      </button> 
     </div> 
    </div> 

    <div class = "row modal-profile-row"> 
     <div class = "col"> 
      <button class="button button-clear" ng-click="ctrl.logUserOut()"> 
      <span class="title light">Sign Out</span> 
      </button> 
     </div> 
    </div> 
</section> 
</ion-content> 
</ion-pane> 
</ion-modal-view> 

app.js:

.state('tab.dash', { 
url: '/dash', 
views: { 
    'tab-dash': { 
    templateUrl: 'templates/tab-dash.html', 
    controller: 'DashCtrl', 
    controllerAs: 'ctrl' 
    } 
} 
    }) 

EDIT: Оказывается, проблема была с Sublime Text: для по какой-то причине, было aw eird cache issue - я редактировал файл, но изменения не были распознаны. Я рад, что я спросил, потому что теперь я использую `controllerAs: 'в $ stateProvider, а не' controller: someController как-то". Спасибо за вашу помощь!

+0

Где ваш метод 'closeProfileModal'? – Weedoze

+0

ControllerAs - хороший первый шаг. Следующий шаг - иметь DashCtrl как Компонент вместо Контролера: https://docs.angularjs.org/guide/component. Тогда $ ctrl.logUserOut() будет работать нормально. –

+0

@Weedoze Я оставил его, потому что он работает. – rcpilotp51

ответ

1

В вашем app.js изменится:

.state('tab.dash', { 
url: '/dash', 
views: { 
'tab-dash': { 
    templateUrl: 'templates/tab-dash.html', 
    controller: 'DashCtrl', 
    controllerAs: 'ctrl' // <-- here 
} 
} 
}) 

Я объясню немного больше. В контроллере вы устанавливаете переменную в значение «this». Имя, которое вы используете, может быть любым, например wowItsAVariable = this; однако при подключении вашего контроллера вы можете использовать совершенно другое имя, такое как controllerAs: «wowSomeOtherName», и именно так вы ссылаетесь на него в своем html. Имя не имеет значения, и я бы держался подальше от использования таких имен, как «контроллер», поскольку это не говорит никому, к какому контроллеру вы пытаетесь ссылаться. Надеюсь, это поможет.

+0

У этого же результата. – rcpilotp51

+0

Извините за свой html-изменение:

+0

Право, спасибо. все тот же результат, и метод не может быть вызван. – rcpilotp51