首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将具有解析的angular ui路由器状态抽象为构造函数的方法

将具有解析的angular ui路由器状态抽象为构造函数的方法
EN

Stack Overflow用户
提问于 2017-06-23 03:37:52
回答 1查看 35关注 0票数 0

我有这个构造函数:

代码语言:javascript
复制
function State(url, templateUrl, controller, controllerAs, factory, resolveProp){
  this.url = url
  this.templateUrl = templateUrl
  this.controller = controller
  this.controllerAs = controllerAs
}

在我的路由器回调中,我有这样的结果:

代码语言:javascript
复制
$stateProvider
  .state('archetypes', new State('/admin/archetypes', './resources/features/admin/archetypes/index.html', 'archetypes', 'aaVM'))

这可以很好地工作。然而,我还有另一条路径,它包含了获取一些后端数据的解决方案。

我想我也许可以为我的构造函数做一些类似的事情:

代码语言:javascript
复制
function State(url, templateUrl, controller, controllerAs, factory, resolveProp){
  this.url = url
  this.templateUrl = templateUrl
  this.controller = controller
  this.controllerAs = controllerAs
  if(factory){
    this.resolve = {}
    this.resolve[resolveProp] = function(factory){
      return factory.getAll()
    }
  }
}

然后以这种方式实例化一个状态:

代码语言:javascript
复制
.state(
    'archetypes',
     new State(
         '/admin/archetypes',
         './resources/features/admin/archetypes/index.html', 
         'archetypes',
         'aaVM',
         ArchetypesFactory,
         'archetypes'
     )
)

但我认为.state方法调用控制器是为了处理resolve对象,因此当我尝试上面的状态实例化时,它会出错,因为ArchetypesFactory显然是未定义的。

请注意,当我以这种方式编写状态时:

代码语言:javascript
复制
.state('archetypes', {
  url: '/admin/archetypes',
  templateUrl: './resources/features/admin/archetypes/index.html',
  controller: 'archetypes',
  controllerAs: 'aaVM',
  resolve: {
    archetypes: function(ArchetypesFactory){
      return archetypesFactory.getAll()
    }
  }
})

它工作得很好。

有没有什么方法可以通过解析将状态配置对象抽象为构造函数或ES6类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-23 04:05:37

解析器函数由AngularJS注入器调用。注入器需要一种显式形式的注释。一种方法是使用Inline Array Annotation

代码语言:javascript
复制
function State(url, templateUrl, controller, controllerAs, factory, resolveProp){
  this.url = url;
  this.templateUrl = templateUrl;
  this.controller = controller;
  this.controllerAs = controllerAs;
  if(factory){
    this.resolve = {}
    this.resolve[resolveProp] = [factory, function(factory){
      return factory.getAll();
    }];
  };
}

然后为工厂参数指定一个字符串:

代码语言:javascript
复制
.state(
    'archetypes',
     new State(
         '/admin/archetypes',
         './resources/features/admin/archetypes/index.html', 
         'archetypes',
         'aaVM',
         //ArchetypesFactory,
         //USE string
         'ArchetypesFactory',
         'archetypes'
     )
)

内联数组注释是注释应用程序组件的首选方法。在使用这种类型的注释时,要注意使注释数组与函数声明中的参数保持同步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44708008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档