我'用我的Ionic app试用firebase 3。 (我只是搞得一个 - 所以我想我也可以从一开始就做好一切,比如使用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'
}
}
})
修改 事实证明问题出在Sublime Text:由于某种原因,有一个奇怪的缓存问题 - 我正在编辑文件,但是没有识别出这些变化。我很高兴我问过,因为现在我正在使用&#39; controlsAs:&#39;在$ stateProvider而不是&#39; controller:someController作为&#39;。谢谢大家的帮助!
答案 0 :(得分:1)
在您的app.js中更改为:
.state('tab.dash', {
url: '/dash',
views: {
'tab-dash': {
templateUrl: 'templates/tab-dash.html',
controller: 'DashCtrl',
controllerAs: 'ctrl' // <-- here
}
}
})
我会解释一下。在您的控制器中,您将变量设置为&#39; this&#39;。你使用的名字可以是wowItsAVariable = this;但是当你连接你的控制器时,你可以使用一个完全不同的名称,例如controllerAs:&#39; wowSomeOtherName&#39;这就是你在HTML中引用它的方式。这个名字并不重要,我不会使用诸如“控制器”之类的名字。因为这并没有告诉任何人你试图引用的控制器。希望有所帮助。