angularjs – 为什么要给一个“抽象:真”状态一个url?
我今天试图更好地理解Ionic的脚手架,我注意到的一个事情是,他们给抽象的状态的“标签”一个url。
我只使用抽象状态,我使用一个空字符串作为url,我注意到,如果我不小心尝试导航到抽象状态(而不是子状态),我得到的错误:
编辑: “此外,在实验中,当我尝试为我的抽象状态(在离子之外)分配一个url并且仍然渲染嵌套状态视图时,我得到一个大鹅蛋,没有什么显示。 上面引用的语句是false!我在Plunker尝试了,并且嵌套的状态确实出现了。 angular.module('routingExperiments',['ui.router']) .config(function($urlRouterProvider,$stateProvider) { $stateProvider .state('abstractExperiment',{ abstract: true,url: '',//<--- seems as if any string can go here. templateUrl: 'abstractExperiment.html' }) .state('abstractExperiment.test1',{ url: '/test1',templateUrl: 'abstractTest1.html' }); }); 显然我的确做错了。所以我的新问题是: 有什么理由为什么在使用抽象状态时使用命名状态而不是空字符串,还是只是一个风格选择?
你将使用抽象状态的原因是当你的一部分你的url不可导航时保持你的定义干燥。例如,假设您有一个类似以下的网址方案:
/home/index /home/contact 不过,无论在您的设计中出于什么原因,此网址无效(即网页没有用途): /home 现在你可以简单地为这种情况创建两个状态,使用完整的URL,然而,然后你将写/ home /两次,并且描述有点复杂。最好的想法是创建一个主抽象父对象,其他两个状态是子对象(对于ui-router文档): $stateProvider .state('parent',{url: '/home',abstract: true,template: '<ui-view/>'} ) .state('parent.index',{url: '/index',templateUrl: 'index.html' }) .state('parent.contact',{url: '/contact',templateUrl: 'contact.html' }) 请注意,在父状态内,我们分配一个模板,其唯一的子视图是ui-view。这确保孩子们被呈现(并且可能是你的孩子为空的原因)。 有时你可能注意到使用一个抽象状态与一个空白的url。最好使用这个设置是当你需要父母的解决方案。例如,您可能需要某些特定的服务器数据用于您的一部分州。因此,不要将相同的resolve函数放入每个状态,您可以使用所需的解析创建一个空的url父级。它也可以是有用的,如果你想要分层控制器,其中父没有用于视图(不知道为什么你会想要这,但它是可能的)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |