gpt4 book ai didi

angularjs - 将ui.router中的$ state.go()的默认行为更改为默认情况下重新加载

转载 作者:行者123 更新时间:2023-12-04 03:04:10 26 4
gpt4 key购买 nike

我有一个使用ui.router包进行URL路由的Angular应用程序。我想更改它,以便如果用户尝试导航到他们已经在的页面,则路由器会重新加载该状态,而不是什么也不做。对于http://angular-ui.github.io/ui-router/site/#/api/ui.router.state。$ state#go,$ state.go确实采用了一个重载参数来实现此目的,但是默认为false。现在,把一个对$ state.go的每个调用和我的代码中的每个ui-sref都重写为reload设置为一个糟糕的主意让我感到震惊。我想要的是一种为$ state.go更改该参数的默认值的方法,否则,至少是ui-sref装饰器。

http://angular-tips.com/blog/2013/09/experiment-decorating-directives/之后,我尝试至少扩展ui-sref指令(因为这些指令比显式的$ state.go调用要多得多)

myApp.config(function($provide) {
// override ui-sref to have the reload option default to true.
$provide.decorator('uiSrefDirective', function($delegate){
var directive = $delegate[0];
var link = directive.link;

directive.compile = function() {
return function(scope, element, attrs) {
if(attrs.uiSrefOpts == null){
attrs.uiSrefOpts = {};
}

if(attrs.uiSrefOpts.reload == null){
attrs.uiSrefOpts.reload = true;
}
console.log(arguments);

link.apply(this, arguments);
};
};
return $delegate;
});

但是,这实际上似乎并没有完成任何事情,即使成功了,它实际上也不会影响$ state.go。没有人知道如何在ui.router代码中手动更改该行为,而无需手动更改?

最佳答案

我在下面调整了您的方法。我们将从装饰中受益,但不能从指令中受益。正如我们可以在此处检查的那样,在 ui-sref directive源代码中,click事件实际上会调用:

$state.go(ref.state, params, options); 
因此,我们可以装饰 $state提供程序,这可能非常简单:
.config(function ($provide) {
$provide.decorator('$state', function ($delegate) {

// let's locally use 'state' name
var state = $delegate;

// let's extend this object with new function
// 'baseGo', which in fact, will keep the reference
// to the original 'go' function
state.baseGo = state.go;

// here comes our new 'go' decoration
var go = function (to, params, options) {
options = options || {};

// only in case of missing 'reload'
// append our explicit 'true'
if (angular.isUndefined(options.reload)) {

options.reload = true;
}

// return processing to the 'baseGo' - original
return this.baseGo(to, params, options);
};

// assign new 'go', right now decorating the old 'go'
state.go = go;

return $delegate;
});
})
这就足够了。现在,任何状态更改(包括单击 ui-sref)都将触发 reload
注意:只能说,我不认为这是这样做的。一直触发重载...对我来说,实际上我们实际上失去了很多,失去了钻石带来的优势- ui-router

关于angularjs - 将ui.router中的$ state.go()的默认行为更改为默认情况下重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com