2017-09-02 28 views
0

我无法在控制器中注入ui路由的解析属性。 这是给为什么在使用ui-router注入控制器中解析的属性时出现提供程序错误?

错误:$注射器:unpr 未知提供商

当我使用状态定义对象控制器属性如下

.state('widget', { 
    url: '/widgets', 
    template: '<h1>{{name}}</h1>', 
    controller: function(widget, $scope) { 
     $scope.name = widget.name; 
    }, 

    resolve: { 
     // standard resolve value promise definition 
     widget: function() { 
      return { 
       name: 'myWidget' 
      }; 
     }, 
     // resolve promise injects sibling promise 
     features: function(widget) { 
      return ['featureA', 'featureB'].map(function(feature) { 
       return widget.name+':'+feature; 
      }); 
     } 
    } 
}); 

然后,它工作正常,我能够在控制器中获得小部件,并且能够在html中使用。

请参阅小提琴的代码。

http://jsfiddle.net/sunilmadaan07/ugsx6c1w/8/

可能是我正在做一个愚蠢的错误。 在发布这个问题之前,我曾尝试用简单对象,承诺对象返回属性。

在此先感谢。

回答

0

为了使控制器能够使用解析器,它应该是路由组件(仅在UI路由器1.x中)或路由控制器。

widgetfeatures是本地依赖关系,它们没有在注入器中注册,并且除了路由控制器/组件外,在应用程序的任何地方都不可用。

如解释here,可以将解析器传递给UI Router 0.3.x中的嵌套组件,并直接注入路由到1.x中的组件。

+0

我已删除嵌套的决心从代码。 请看看 http://jsfiddle.net/sunilmadaan07/ugsx6c1w/13/ –

+0

你不能在* nested * show-data组件中使用'widget'解析器。切换到UI路由器1.x并将其直接用作路由组件。 – estus

1

您无法使用您所做的代码在指令中获得已解析的数据。基本上,您正试图使用​​旧版本的角1.3.x实现基于组件的结构。

你有两个选择来实现这一点。

  • 创建路由控制器即可进入决心控制器作为局部依赖然后使用该依赖性,结合该指令。 这里是例子 - http://plnkr.co/edit/TOPMLUXc7GhXTeYL0IFj?p=preview

  • 升级角版本1.5.x的和使用"ui-router-route-to-components": "^0.1.0"

在这里工作你的代码的例子 - http://jsfiddle.net/ugsx6c1w/25/

+0

好的!谢谢!!! –

相关问题