java重新加载_重新加载当前状态 - 刷新数据

这篇博客探讨了在AngularJS中使用UI-Router刷新或重新加载当前状态的不同方法,包括$state.reload(),$state.go()和$state.transitionTo()的使用,以及如何处理视图缓存。示例代码展示了如何在应用中实现状态的强制重新加载。
摘要由CSDN通过智能技术生成

回答(18)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我发现这是用ui-router刷新的最短工作方式:

$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams

Update 对于较新版本:

$state.reload();

这是别名:

$state.transitionTo($state.current, $stateParams, {

reload: true, inherit: false, notify: true

});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

此解决方案适用于AngularJS V.1.2.2:

$state.transitionTo($state.current, $stateParams, {

reload: true,

inherit: false,

notify: true

});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

那将是最终的解决方案 . (灵感来自@ Hollan_Risley的帖子)

'use strict';

angular.module('app')

.config(function($provide) {

$provide.decorator('$state', function($delegate, $stateParams) {

$delegate.forceReload = function() {

return $delegate.go($delegate.current, $stateParams, {

reload: true,

inherit: false,

notify: true

});

};

return $delegate;

});

});

现在,无论何时需要重新加载,只需调用:

$state.forceReload();

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

用于离子骨架

$state.transitionTo($state.current, $state.$current.params, { reload: true, inherit: true, notify: true });//reload

$stateProvider.

state('home', {

url: '/',

cache: false, //required

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

可能更清洁的方法如下:

Details State

我们只能从HTML重新加载状态 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

@Holland Risley的答案现在可以在最新的ui-router中作为api使用 .

$state.reload();

强制重新加载当前状态的方法 . 重新解析所有结算,重新安排控制器并重新触发事件 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

$state.go($state.current, $stateParams, {reload: true, inherit: false});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

$scope.reloadstat = function () { $state.go($state.current, {}, {reload: true}); };

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您想重新加载整个页面,就像看起来一样,只需在控制器中注入$ window然后调用即可

$window.location.href = '/';

但如果您只想重新加载当前视图,请注入$ scope,$ state和$ stateParams(后者以防万一您需要在即将到来的重新加载中更改某些参数,例如您的页码),然后在任何内容中调用控制器方法:

$stateParams.page = 1;

$state.reload();

AngularJS v1.3.15 angular-ui-router v0.2.15

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

愚蠢的解决方法始终有效 .

$state.go("otherState").then(function(){

$state.go("wantedState")

});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于角度v1.2.26,以上都不起作用 . 必须单击调用上述方法的ng-click才能使状态重新加载 .

所以我最终使用$ timeout模拟了2次点击 .

$provide.decorator('$state',

["$delegate", "$stateParams", '$timeout', function ($delegate, $stateParams, $timeout) {

$delegate.forceReload = function () {

var reload = function () {

$delegate.transitionTo($delegate.current, angular.copy($stateParams), {

reload: true,

inherit: true,

notify: true

})

};

reload();

$timeout(reload, 100);

};

return $delegate;

}]);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

一切都失败了 . 唯一有效的方法是将cache-view =“false”添加到我想要重新加载的视图中 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

不知道为什么这些似乎都不适合我;最终做到的是:

$state.reload($state.current.name);

这是使用Angular 1.4.0

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我有多个嵌套视图,目标是只重新加载一个内容 . 我尝试了不同的方法,但唯一对我有用的是:

//to reload

$stateParams.reload = !$stateParams.reload; //flip value of reload param

$state.go($state.current, $stateParams);

//state config

$stateProvider

.state('app.dashboard', {

url: '/',

templateUrl: 'app/components/dashboard/dashboard.tmpl.html',

controller: 'DashboardController',

controllerAs: 'vm',

params: {reload: false} //add reload param to a view you want to reload

});

在这种情况下,只需重新加载所需的视图,缓存仍然有效 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我知道有一堆答案,但我发现这样做的最好方法是在没有引起整页刷新的情况下,在我要刷新的路线上创建一个虚拟参数,然后当我调用路径时,我传入一个随机数到虚拟参数 .

.state("coverage.check.response", {

params: { coverageResponse: null, coverageResponseId: 0, updater: 1 },

views: {

"coverageResponse": {

templateUrl: "/Scripts/app/coverage/templates/coverageResponse.html",

controller: "coverageResponseController",

controllerAs: "vm"

}

}

})

然后调用那条路线

$state.go("coverage.check.response", { coverageResponse: coverage, updater: Math.floor(Math.random() * 100000) + 1 });

像魅力一样工作并处理结果 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

但是,如果您想在视图更改后使每个控制器显示,您可以使用

myApp.config(function($ionicConfigProvider) { $ionicConfigProvider.views.maxCache(0); ... }

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我有这个问题它破坏了我的头,我的路由从JSON文件读取,然后送入指令 . 我可以点击一个ui状态,但我无法重新加载页面 . 所以我的同事给我看了一个不错的小技巧 .

获取您的数据

在您的应用程序配置中创建加载状态

在rootscope中保存要转到的状态 .

在您的app.run中将您的位置设置为"/loading"

在加载控制器中解析路由承诺,然后将位置设置为预期目标 .

这对我有用 .

希望能帮助到你

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您使用离子v1,上述解决方案将无法工作,因为离子已启用模板缓存作为$ ionicConfigProvider的一部分 .

解决这个问题有点麻烦 - 你必须在ionic.angular.js文件中将缓存设置为0:

$ionicConfigProvider.views.maxCache(0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值