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

基于API Ajax调用的插件的Angular UI-Router动态路由。基于子弹加载视图

章玮
2023-03-14
问题内容

可通过API访问的服务器数据库中的示例实例

{slug: "john-smith",type: "user"}
{slug: "microsoft-technologies",type: "company"}

场景1: 用户视图和控制器:http:// localhost / john-smith

.state('user', {
    url: '/:user',
    templateUrl: 'partial-user.html',
    controller: 'userCtrl'
})

方案2: 公司视图和控制器:http:// localhost / microsoft-
technologies

.state('company', {
    url: '/:company',
    templateUrl: 'partial-company.html',
    controller: 'companyCtrl'
})

现在,我想根据从API调用到服务器的数据段创建动态状态。

我写了一个 假想的代码。 但是我没有办法实现

// Example URL http://localhost/john-smith
.state('hybrid', {
    // /john-smith
    url: '/:slug',
    templateUrl: function () {
        return "partial-"+type+".html"
    },
    controllerProvider: function (rt) {
        return type+'Controller'
    },
    resolove: {
        type: function ($http, $stateParams) {
            $http.get({
                method: "GET",
                url: "http://localhost/api/" + $stateParams.slug
            }).success(function(response, status, headers, config){
                //response = {slug: "john-smith",type: "user"}
                return response.type
            })
            return 
        }
    }    
})

问题答案:

有一个工作的傻瓜。

它来自类似的问题:AngularJS ui-router-两个相同的路由组

如果我确实正确理解了您的目标,这将是调整后的状态定义 (我只是跳过了$ http和服务器响应部分,只使用了传递的参数)

.state('hybrid', {
    // /john-smith
    url: '/{slug:(?:john|user|company)}',
    templateProvider: ['type', '$templateRequest',
      function(type, templateRequest) 
      {
        var tplName = "tpl.partial-" + type + ".html";
        return templateRequest(tplName);
      }
    ],
    controllerProvider: ['type',
      function(type) 
      {
        return type + 'Controller';
      }
    ],
    resolve: {
      type: ['$http', '$stateParams',
        function($http, $stateParams) {
          /*$http.get({
            method: "GET",
            url: "http://localhost/api/" + $stateParams.slug
        }).success(function(response, status, headers, config){
            //response = {slug: "john-smith",type: "user"}
            return response.type
        })*/
          return $stateParams.slug
        }
      ]
    }
})

一种更改是 resolove : {} 成为: resolve : {} 。另一个是控制器定义(rt vs
type)。而且,我们从内置的功能做利润templateProvider$templateRequest (类似于此:
角ui.router重载父templateProvider

在这里检查动作

EXTEND,包括$http部分(扩展的plunker)

让我们调整(出于更矮小的目的)服务器部分以将此信息返回为 data.json

{
 "john-smith": {"type": "user"},
 "lady-ann": {"type": "user"},
 "microsoft-technologies" : {"type": "company" },
 "big-company" : {"type": "company" },
 "default": {"type" : "other" }
}

这些链接:

<a href="#/john-smith">
<a href="#/lady-ann">

<a href="#/microsoft-technologies">
<a href="#/big-company">

<a href="#/other-unknown">

通过此调整后的状态def可以轻松进行管理:

  .state('hybrid', {
    // /john-smith
    url: '/:slug',
    templateProvider: ['type', '$templateRequest',
      function(type, templateRequest) 
      {
        var tplName = "tpl.partial-" + type + ".html";
        return templateRequest(tplName);
      }
    ],
    controllerProvider: ['type',
      function(type) 
      {
        return type + 'Controller';
      }
    ],
    resolve: {
      type: ['$http', '$stateParams',
        function($http, $stateParams) {
          return $http.get("data.json")
            .then(function(response){
              var theType = response.data[$stateParams.slug]
                  ||response.data["default"]
              return theType.type
            })
        }
      ]
    }
  })

在这里检查更新的内容



 类似资料:
  • 我希望使用相同的路由路径,根据用户角色为我的用户加载稍微不同的视图。 以前,我已经加载了基于当前域的不同路由: 这种方法只依赖于子域,子域在创建时可用,因此所有内容都可以是同步的。我必须对用户进行身份验证,根据其角色加载正确的路由,然后导出路由器以初始化vue应用程序。 理想情况下,我可以加载基于用户角色的,,,其中可以包含角色的所有路由定义。 我正在使用Feathers-vuex,但我似乎不能等

  • 问题内容: 更新的问题 标题中的问题仍然存在-是否有可能捕获和取消视图重载。 原始问题 :我需要为应用程序添加锚点支持(主题的锚点)。 这是我的距离: 我的根本问题是,当我单击带有的链接时,状态会完全重新加载,这反过来又重新请求Topic的数据。如何仅“刷新”查询参数(并在控制器中捕获该事件)却不重新加载状态(以保持数据加载)? 编辑 对于我的问题,有一个相当简单的解决方案,但我没注意到-根据有关

  • 尽管我对Angular比较陌生,但它应该是如此简单以至于让我发疯。我使用带有“使用角度路由”选项的CLI创建了一个角度项目。创建了一个功能模块,并使用VS代码中的支架插件(Alexander Ivanichev的“Angular Files”)为其添加了一个路由类。一开始,我只是直接在app.component.html中添加组件选择器,它工作得很好,当我添加了路由器出口,将所有东西连在一起,并将

  • 问题内容: 我正在尝试在正在制作的购物车中显示图像,但没有显示出来。我必须导入每个图像吗?我知道我的路径很好,因为它以前可以工作。我认为我的product.js文件中可能有问题,但我无法弄清楚。 这是我的Product.js 数据来自此product.js 我正在提取所有数据,但图像没有显示 问题答案: 假设您使用的是webpack,则需要导入图像以使其像 现在您的图像数据是动态的,直接指定导入路

  • 我的目标是开发一个单一的骆驼路线来映射这些服务器,接受路径中服务器的名称。类似于这样: 我的(简化且不起作用)Blueprint.xml: 问题是,我不知道如何从路径中移除/center、/north或/south,因此头部被传递给目标服务,而目标服务不知道如何处理它。调用: