【问题标题】:Ionic controller reloading on $state.go with param使用参数在 $state.go 上重新加载离子控制器
【发布时间】:2016-11-23 13:22:21
【问题描述】:

我有一个具有多个选项卡的 Ionic 应用程序。要在标签之间导航,我使用

$state.go('tabname',{params:params}) 

这一切都很好,但是如果我将参数传递给 $state.go 它会重新加载整个角度控制器。

我在 Angular 控制器的顶部放置了一个 console.log。这会在第一次加载选项卡时注销(很好)然后如果我导航到另一个选项卡然后导航回来它不会记录(很好)但是如果我导航到另一个选项卡并调用

$state.go('tabname', {paramKey:'paramValue'}) 

它记录(不好)告诉我与该选项卡关联的控制器正在重新加载。这给我带来了很多问题。有没有办法告诉视图不要重新加载控制器?

这是相关选项卡的 $stateProvider .state:

.state('tab.ask', {
    url: '/ask',
    views: {
        'tab-ask': {
            templateUrl: 'templates/tab-ask.html',
            controller: 'AskCtrl'
        }
    },
    params: {
        'paramKey': null
    }
})

【问题讨论】:

  • 尝试添加cache:true,tab状态下的object Ref:ionicframework.com/docs/api/directive/ionNavView
  • 你确定$scope.on是你想要的吗?我应该是$scope.$on,第二,你为什么不用ui-sref指令或者$state.go函数呢?
  • 添加 cache:true 并没有解决问题(它在文档中说缓存的默认值无论如何都是 true)。我在我的问题中输入了错误的代码我实际使用的函数调用是 $state.go() 我已经更新了我的问题
  • 你试过$state.transitionTo('tabname', {paramKey: 'paramValue'}, {notify: false})吗?
  • 刚刚尝试使用 notify:flase 进行转换,但无法解决问题。

标签: javascript angularjs cordova ionic-framework


【解决方案1】:

首先,没有办法告诉控制器不要在状态更改时重新加载。据我所知,这基本上是角度的工作方式——数据绑定等等。意思是,控制器中的所有值都不适用于当前范围,并且为当前视图启动了一个范围。

不使用缓存存储值的最佳方法是使用$services,因为它遵循Singletons design patternhttps://docs.angularjs.org/guide/services,并且即使重新加载控制器,传递给服务的值也不会更改。

您可以在https://www.tutorialspoint.com/angularjs/angularjs_services.htm 上找到有关如何创建服务的示例。

每次发生任何事件(在选项卡上)时,您都需要更新服务,以便您可以跟踪您所在的页面。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2016-02-17
    • 2018-03-25
    • 1970-01-01
    • 2017-09-18
    • 2016-01-12
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多