链接单击不会重新加载控制器

时间:2015-06-28 19:09:50

标签: javascript angularjs angular-ui-router ionic-framework ionic

我有一个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");
}

每次用户点击链接时,如何重新加载控制器?

2 个答案:

答案 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和事件。