当前位置: 首页 > 面试题库 >

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

农存
2023-03-14
问题内容

我有一个使用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指令源代码中,单击事件实际上会调用:

$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
            this.baseGo(to, params, options);
        };

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

        return $delegate;
    });        
})

这就足够了。现在,任何状态更改 _(包括单击ui-sref)_都将触发reload

注意:只能说,我不认为这是这样做的。 一直触发重载…对我来说,实际上我们实际上失去了很多,失去了钻石带来的优势-ui-router



 类似资料:
  • 默认情况下,我们的路由器是Yaf_Router, 而默认使用的路由协议是Yaf_Route_Static,是基于HTTP路由的, 它期望一个请求是HTTP请求并且请求对象是使用Yaf_Request_Http

  • 问题内容: 众所周知,根据JLS7 p.4.12.5, 每个实例变量均使用默认值初始化。例如(1): 但是我一直认为,这样的类实现(2): 绝对等于示例(1)。我期望,复杂的Java编译器会看到(2)中的所有这些初始化值都是多余的,并忽略了它们。 但是突然对于这两个类,我们有两个不同的字节码。 例如(1): 例如(2): 问题是: 为什么?但这是显而易见的要优化的事情。什么原因? UPD: 我使用

  • 但是,我发现该模块将使用DefaultJsonSerializer序列化Map和Entry对象(因为它们也是Object对象)。 如何更改默认序列化行为,同时确保条目和映射对象按预期序列化?

  • 是否有任何方法可以将外部脚本包含(或加载)到脚本引擎,以便外部脚本中定义的所有函数都可以在方法中使用? 在我们的应用程序中,我们根据用户输入执行一些java脚本代码。当用户请求时,应用程序会创建一个ScriptEngine实例并根据输入参数执行适当的javascript代码。 这里的问题是javascript中有一些重复的功能。考虑一个例子: 场景1:当用户输入为十进制纬度和经度时,计算距离 -

  • 我有以下验证组: 默认情况下,如果没有指定组,那么是否应该验证使用扩展的组注释的所有字段?

  • 问题内容: 我想重写类上的方法以执行某些操作,但我不想破坏默认行为。 正确的方法是什么? 问题答案: 覆盖应该没问题-只能作为最后的选择,即,如果实例中没有与名称匹配的属性。例如,如果您访问,则仅当没有调用属性时才会被调用。如果该属性是您不想处理的属性,请引发: 但是,与不同,首先会被调用(仅适用于新样式类,即从对象继承的类)。在这种情况下,您可以保留默认行为,如下所示: 有关更多信息,请参见Py