在Angular ui-router嵌套状态url更改,但模板未加载

 mobiledu2502906047 发布于 2023-01-30 17:11

我正在使用ui-router来嵌套状态和视图.当我单击链接时,URL将更改为子状态的URL,但模板不会加载.

例如,当URL更改为子状态时project/settings,project.settings.html不会加载相应的模板.

这是一个礼貌SSCCE Plunkr

以下是我的代码:

app.js

myApp.config(function ($stateProvider, $urlRouterProvider){
             $stateProvider
                  .state('project', {
                         url: "/project",
                         views:{
                         "content":{templateUrl: "partials/project.html"},
                         "header":{templateUrl: "partials/header"}
                         }
                       })

                  .state('project.settings', {
                          url: "/settings",
                          views:{
                           "content":{templateUrl: "partials/project.settings.html"},
                           "header":{templateUrl: "partials/header"}
                          }
                         }) 
            $urlRouterProvider.otherwise("/")                   
   }); 

    /* cheching whether the user is authentic or not*/


 myApp.run(function($rootScope,$location,$cookieStore,validateCookie,$state) {
      $rootScope.$on('$stateChangeStart',function(event,toState,toParams,fromState){
         if($cookieStore.get('user')){
            validateCookie.authService(function(result,error){
              if(!result){
                 $location.path("/");
              }else{
                $state.go('project.settings');
              }
            });   
         }
         else{
            $location.path("/"); 
         }
        });
    });

的index.html

                

project.html

            

project.settings.html

        

Project Setting -State test

Vladyslav Ba.. 23

嵌套的project.settings状态需要使用'@'后缀明确地处理更高状态的视图,即:

.state('project.settings', {
        url: "/settings",
        views:{
              "content@":{templateUrl: "partials/project.settings.html"},
              "header@":{templateUrl: "partials/header"}
        }
 }) 

在这里查看更多详细信息https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views#view-names---relative-vs-absolute-names

2 个回答
  • 嵌套的project.settings状态需要使用'@'后缀明确地处理更高状态的视图,即:

    .state('project.settings', {
            url: "/settings",
            views:{
                  "content@":{templateUrl: "partials/project.settings.html"},
                  "header@":{templateUrl: "partials/header"}
            }
     }) 
    

    在这里查看更多详细信息https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views#view-names---relative-vs-absolute-names

    2023-01-30 17:12 回答
  • 首先将project.settings.htmltemplateurl和文件名中的文件名更改为projectSettings.html(删除点).

       .state('project.settings', {
             url: "/settings",
              views:{
                   "content":{templateUrl: "partials/projectSettings.html"},
                   "header":{templateUrl: "partials/header"}
               }
        }) 
    

    在项目模板中添加两个div来加载子页面(标题abd projectSettings)

    注意:此div中的任何内容都将替换为此处加载的页面.

    project.html

         <div ng-controller="userController">
            <div class="details">
                <a ui-sref=".settings" class="btn btn-primary">Settings</a>
            </div>
            <div ui-view="header">( Project Page header will replace with projectSettings header )</div>
            <div class="container" ui-view="content">( Project Page content will replace with projectSettings Content )</div>
    
        </div>
    

    2023-01-30 17:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有