【问题标题】:Link click does not reload controller链接点击不会重新加载控制器
【发布时间】:2015-09-15 05:02:39
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您应该使用transitionTo 重新加载您的控制器和路由。

    标记

    <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找到它,更好的解释只有我自己给出

    【讨论】:

    • 收到了这个Error: [$parse:syntax] Syntax Error: Token ',' is an unexpected token at column 3 of the expression [{}, {reload: true}] starting at [, {reload: true}].
    • 控制器代码的第 3 行是否存在问题?我正在尝试将第一个参数作为字符串但仍然没有运气。
    • @jason328 您是否要重新加载页面?点击该链接
    • 还是没有运气。我已经适当地复制了这段代码,重定向有效,但控制器没有重新加载。我也会发布我的路由器代码。
    • 我不想重新加载页面,而是控制器本身。这很重要,因为如果用户在访问该页面时未登录,我想显示一个模式。所以发生的情况是用户第一次访问该页面,模态弹出,如果他们稍后再次访问,则模态不再弹出。模态通过控制器加载。
    【解决方案2】:

    所以,我认为您真正想做的不是使用缓存。这意味着在您所在的州,您需要设置cache: false。需要明确的是,控制器不会“重新加载”。除非您将缓存设置为 false,否则范围很容易在您返回页面时删除并重新添加。

    我认为这不一定是最好的方法。我将使用导航生命周期中的事件并为$ionicView.loaded 设置一个处理程序。您可以在以下部分的文档中找到有关 ion-view 事件的详细信息:查看生命周期和事件。

    【讨论】:

    • 感谢您提供替代解决方案。我会进一步调查。
    • @pankajparkar 是的。顺便说一句,很好的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2012-02-26
    相关资源
    最近更新 更多