Angular-UI-Router - 获取动态模板的内容

xdh*_*ore 6 javascript promise angularjs angular-ui-router

我正在使用angular-ui-router构建一个角度应用程序.后端有一个REST api,它根据票证ID为我提供表单的URL.在app.js中,我想基于对此REST服务的查询动态设置模板.例:

$stateProvider
  .state('form', {
    url: '/form/:id',
    templateProvider: function ($resource, formResolver, $stateParams) {

      //formResolver calls the REST API with the form id and gets back a URL.
      return formResolver.resolve($stateParams.id).then(function(url) {
        return $resource(url).get();
      };

    },
    controller: 'MyCtrl'
  });
Run Code Online (Sandbox Code Playgroud)

问题是我最终返回了一个promise,而templateProvider需要一串内容.我想做的就是返回网址:

$stateProvider
  .state('form', {
    url: '/form/:id',

    //I would like to inject formResolver, but I can't
    templateUrl: function (stateParams, formResolver) {
      return formResolver.resolve(stateParams.id);
    },
    controller: 'MyCtrl'
  });
Run Code Online (Sandbox Code Playgroud)

但是根据https://github.com/angular-ui/ui-router/wiki#wiki-templates使用templateUrl而不是templateProvider时我没有得到依赖注入,我仍然有它返回一个promise的问题.我想也许我唯一的解决方案就是不使用promise api.

xdh*_*ore 8

事实证明我使用的方式有问题$resource.我还不确定是什么.从查看angular-ui-router的源代码,该函数可以返回一个promise.我最终复制了https://github.com/angular-ui/ui-router/blob/master/src/templateFactory.js中的一些代码来获取以下内容,其工作原理如下:

    templateProvider: function ($http, formService, $stateParams) {
      return formService.getFormUrl($stateParams.id).then(function(url) {
        return $http.get(url);
      }).then(function(response) {
        return response.data;
      })
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`return $ templateFactory.fromUrl(url)` (14认同)