我有一个Ionic应用程序,我希望控制器在用户访问选项卡时重新加载。我在这里有以下链接......
<ion-tab icon-off="ion-ios-person-outline" icon-on="ion-ios-person" ui-sref="tab.profile({reload: true})">
<ion-nav-view name="tab-profile"></ion-nav-view>
</ion-tab>
如果我访问标签链接一次,控制器会加载(显然)。如果我离开页面并再次单击该链接,页面将不会重新加载。我通过向控制器文件中注入console.log
来检测此页面的方式重新加载。
angular.module('coolsite.user')
.controller('ProfileController', profileController)
profileController.$inject = [];
function profileController( ) {
var vm = this;
console.log("activated");
}
每次用户点击链接时,如何重新加载控制器?
答案 0 :(得分:2)
您应该使用transitionTo
重新加载控制器&amp;路由。
<强>标记强>
<ion-tab icon-off="ion-ios-person-outline" icon-on="ion-ios-person" ng-click="vm.redirect('tab.profile')">
<ion-nav-view name="tab-profile"></ion-nav-view>
</ion-tab>
<强>控制器强>
vm.redirect = function(stateName){
$state.transitionTo(stateName, {} , {
reload: true,
inherit: false,
notify: true
});
}
<强>更新强>
虽然它与angular-ui-router
无关,但它与ionic-view
特别相关,但默认情况下会缓存。您需要可以通过提及cache: false
来禁用状态缓存。
<强>代码强>
.state('tab.profile', {
url: '/profile',
views: {
'tab-profile': {
templateUrl: 'templates/tabs/profile.html',
controller: 'ProfileController as profile',
reload: true
}
},
cache: false
})
还有两种替代方法可以实现这一点,您可以在this answer中找到它,并且只有我提供更好的解释
答案 1 :(得分:1)
所以,我认为你真正想要做的就是不使用缓存。这意味着在您所在的州,您需要设置zip
。需要说明的是,控制器不会重新加载。&#34;除非将缓存设置为false,否则在返回页面时,范围很容易删除并重新添加。
我认为这不一定是最好的方法。我会使用导航生命周期中的事件并为myList
设置处理程序。您可以在以下部分的文档中找到有关ion-view的事件的详细信息:查看LifeCycle和事件。