2015-06-16 32 views

回答

0

据我所知它不可能只加载子视图。无论何时加载孩子的视图,其父母的视图也随之加载。

+0

我必须隐藏子视图的父视图 –

10

这可以使用视图定位完成。

假设你在根目录下有一个未命名的ui-view。当孩子被激活时,它可以使用目标视图接管父母的未命名视图。子视图可以直接把自己的内容放到父母的观点:

var app = angular.module("plunker", ['ui.router']) 
app.config(function($stateProvider) { 
    $stateProvider.state('parent', { 
    url: "", 
    template: "<a ui-sref='.child'>Go to child</a><h1>Parent</h1>" 
    }).state('parent.child', { 
    url: '/child', 
    views: { 
     "@": { 
     template: "<a ui-sref='^'>Back to parent</a><h1>child</h1>" 
     } 
    } 
    }) 
}) 

,也可能与只是有一个嵌套的UI视图,它又将目标

var app = angular.module("plunker", ['ui.router']) 
app.config(function($stateProvider) { 
    $stateProvider.state('parent', { 
    url: "", 
    template: "<a ui-sref='.child'>Go to child</a><h1>Parent</h1>" 
    }).state('parent.child', { 
    url: '/child', 
    views: { 
     "@": { 
     template: "<small>parent ui-view overridden by parent.child</small> <div ui-view='child'/>" 
     }, 
     "[email protected]": { 
     template: "<a ui-sref='^'>Back to parent</a><h1>child</h1>" 
     } 
    } 
    }) 
}) 
模板替换父视图

目标命名视图是“viewname @ statename”。命名视图“@”表示在(@)根状态(“”)处定位名为空字符串(“”)的视图。

http://plnkr.co/edit/iff63xbNWCbK9MEPMb4f?p=preview

+1

这应该被标记为答案。感谢您的评论! –

8

我通过包装与<div ui-view="">

这父视图将覆盖ui-view与导航到一个孩子的状态,当孩子解决这个问题,否则将包含专利状态的看法。

+1

这是正确的方法。很好,很简单,这提供了一个默认视图,它被下一个状态覆盖。最好的答案是伟大的,但对于更复杂的情况。 – Wtower

+0

这是一个简单而优雅的解决方案 - 哪里不行? – npr

+0

我希望在UI路由器文档中更加突出地解释这一点,因为嵌套并不一定意味着DOM中的组件和子组件都一次完成。 –