我在我的应用程序中使用了优秀的ui-router模块。作为其中的一部分,我使用命名视图来管理我在应用程序中的“动态子导航”。

考虑以下几点:

$urlRouterProvider.otherwise('/person/list');

$stateProvider
    .state('person',{
        url: '/person',abstract: true,})
    .state('person.list',{
        url: '/list',views: {
            "main@": {
                templateUrl: "person.list.html",controller: 'PersonListController'
            }
        }
    })
    .state('person.details',{
        url: '/{id}',views: {
            'main@': {
                templateUrl: "person.details.html",controller: 'PersonController'
            },'nav@': {
                templateUrl: "person.nav.html",controller: 'PersonNavController'
            }
        }
    });

当用户首次访问该应用程序时,会显示一个人员列表。当他们点击一个人时,他们将被带到详细信息页面。相当基本的东西这是标记如果它有帮助…

<div>
    <aside ui-view="nav"></aside>
    <div ui-view="main"></div>
</div>

但是,PersonNavController调用REST服务来获取一个人的列表,所以在查看一个人时,用户能够浏览兄弟元素。使用上述方法会导致模板和控制器重新渲染,从而在每次点击之后导致延迟,尽管内容从不改变。

有没有办法保持’nav @’视图加载,只刷新’主@’视图?

在这种情况下,我使用ui-router的方式是:将视图移动到最小公分母。

其他单词:如果ui-view =“nav”在所有细节之间共享,并且对于所有的细节都是相同的(因为它应该只加载一次) – 它应该是列表状态的一部分(细节的父代州)

父母国家的定义将如下调整:

.state('person.list',{
    url: '/list',views: {
        "main@": {
            templateUrl: "person.list.html",controller: 'PersonListController'
        }
        // here we target the person.list.html
        // and its ui-view="nav"
        'nav@person.list': {
            templateUrl: "person.nav.html",controller: 'PersonNavController'
        }
    }

那么诀窍在哪里?在角ui路由器的力量。在每个国家的定义下,我们都可以瞄准目前的观点。现在,导航视图是列表状态定义的一部分 – 即在详细切换期间不会重新加载(也可以查看here以获得更多的解释)

我们只需要使用定义的命名约定,请参阅:

> View Names – Relative vs. Absolute Names

上述文件中几条引用的行:

views: {
    ////////////////////////////////////
    // Relative targeting             //
    // Targets parent state ui-view's //
    ////////////////////////////////////

    // Relatively targets the 'detail' view in this state's parent state,'contacts'.
    // <div ui-view='detail'/> within contacts.html
    "detail" : { },// Relatively targets the unnamed view in this state's parent state,'contacts'.
    // <div ui-view/> within contacts.html
    "" : { },///////////////////////////////////////////////////////
    // Absolute targeting using '@'                      //
    // Targets any view within this state or an ancestor //
    ///////////////////////////////////////////////////////

    // Absolutely targets the 'info' view in this state,'contacts.detail'.
    // <div ui-view='info'/> within contacts.detail.html
    "info@contacts.detail" : { }

    // Absolutely targets the 'detail' view in the 'contacts' state.
    // <div ui-view='detail'/> within contacts.html
    "detail@contacts" : { }

当状态发生变化时,如何防止命名视图中的重载? AngularJS UI路由器的更多相关文章

  1. ios – Swift:方法重载只在返回类型上有所不同

    我一直在看Swift类,其中定义了两种方法,它们的返回类型不同.我不习惯使用允许这种语言的语言,所以我去寻找描述它如何在Swift中工作的文档.我在任何地方都找不到任何东西.我本来期望在Swift书中有关于它的整个部分.这记录在哪里?

  2. ios – UINavigationController在顶部有额外的状态栏差距

    在iOS5中是具体的.还值得一提的是,我使用应用程序委托来存储和访问所有其他控制器,所以它们被一个持久性实例保留,我可以从任何类访问.在所有控制器的应用程序委托中创建和合成一些属性,并在viewDidLoad中创建实例.这样我可以在任何地方引用我应用程序中的所有控制器,方法是添加:

  3. ios – 在Swift中可以重载=运算符吗?

    可以在Swift中使用overload=运算符来接受例如CGFloat参数吗?我的方法(下面)不起作用.(编辑)重要:上面的编码方法确实有效.请seemyanswerbelow解释为什么我认为没有.解决方法对不起,我很难过.对于CGFloat参数,operator=不需要重载,因为Swift中包含了这样的重载.我试图做类似的事情这失败了,因为我无法放弃让XCode显示的错误让我感到困惑.当然,像我原来的问题(下面)中的方法适用于重载运算符.请随时投票以结束此问题.

  4. Swift 运算符重载

    但是现在还有另外一个Swift的特性,你应该知道并且会爱上它,它就是运算符重载。例如:我们在SwiftSpriteKitutilitylibrary代码中使用运算符重载去讲多个CGPoints对象相加,例如下面代码:1234letpt1=CGPointletpt2=CGPointletpt3=pt1+pt2letpt4=pt3*100方便吧?当一个人查看你的代码,他们希望操作符的默认行为,这时候运算符重载会使他们迷惑。幸运的是Swift让你能够定义属于你自己的自定义的运算符。

  5. Swift 字符串替换/过滤/切割/拼接

    替换为/结果过滤过滤掉单个字符/结果过滤掉开头和结尾的空白结果切割对字符串使用/作为分隔符来切割,不允许空字符串使用split函数结果是一个数组对字符串使用/作为分隔符来切割,允许空字符串结果拼接结果

  6. swift中使用xib

    在OC时代,使用xib来管理界面很简单,但是swift下使用xib有点小复杂。由于项目需要,有一个view需要重复使用,storyboard无法满足需求,使用xib更为简便。总结一下swift中使用xib的注意事项:1.新建cocoatouchclass,xib的file‘sowner设置成对应controller2.由于swift不会自动override父类的init方法,所以如果只是按照第一步来做得话,会报错,因此,我们必须手动添加init方法:以上两个方法必须重载,至于默认构造函数最好也重载:

  7. Swift开发教程--字符串的操作

    替换把?替换为/结果

  8. Swift学习笔记(十二)构造过程

    默认构造器Swift将为所有属性已提供默认值的且自身没有定义任何构造器的结构体或基类,提供一个默认的构造器。构造器的继承和重载跟Objective-C中的子类不同,Swift中的子类不会默认继承父类的构造器。Swift的这种机制可以防止一个父类的简单构造器被一个更专业的子类继承,并被错误的用来创建子类的实例。

  9. Swift 2.0学习笔记Day 39——构造函数重载

    Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。构造函数代理在结构体和类中使用方式是不同,先介绍结构体中构造函数代理。将上一节的示例修改如下:将Rectangle声明为结构体类型,其中也有4个构造函数重载。这种在同一个类型中通过self.init语句进行调用当前类型其它构造函数,其它构造函数被称为构造函数代理。横向代理类似于结构体类型构造函数代理,发生在同一类内部,这种构造函数称为便利构造函数。

  10. Swift iOS 9通讯录访问

    viewmode=list我的stackoverflow前言:在iOS9之前,一直使用AddressBook这个framework来访问用户通讯录。

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部