Unkown provider: $urlMatcherFactory
当我尝试在app配置中注入$ urlMatcherFactory时,这是Angular抛出的错误消息。
我已经包含了ui-router JS文件,并且在过去的几个月里一直在使用它。
我需要做这样的事情:
var dateMatcher = $urlMatcherFactory.compile("/day/{start:date}");
$stateProvider.state('calendar.day', {
url: dateMatcher
});
正如this example所示。
通常这样的代码不会识别$urlMatcherFactory
。所以我尝试将其作为对配置的依赖注入,但后来我得到了这个错误。
答案 0 :(得分:2)
在此问答Matching url with array list of words in AngularJS ui-router中,您可以看到如何使用$urlMatcherFactory
。也是指向working plunker的链接。
在该示例中,$urlMatcherFactory
中使用了.run()
:
.run(['$urlMatcherFactory',
function($urlMatcherFactory) {
var sourceList= ['John', 'Paul', 'George', 'Ringo']
var names = sourceList.join('|');
var urlMatcher = $urlMatcherFactory.compile("/{source:(?:" + names + ")}/:id");
$stateProviderRef
.state('names', {
url: urlMatcher,
templateUrl: 'tpl.root.html',
controller: 'MyCtrl'
});
}
]);
这也意味着,如果你要在配置阶段使用它,你应该要求
$urlMatcherFactoryProvider
(请参阅最后的提供商)
但是:在配置阶段使用提供商意味着 - 我们可以配置它们。我的意思是配置提供商本身。稍后可在运行阶段评估(已配置)
您可能想知道为什么如果工厂,价值等更容易,有人会费心使用提供方法设置一个成熟的提供商。答案是提供商允许大量配置。我们已经提到过,当您通过提供程序(或Angular为您提供的任何快捷方式)创建服务时,您将创建一个新的提供程序,用于定义该服务的构造方式。我没有提到的是,这些提供程序可以注入应用程序的配置部分,以便您可以与它们进行交互!
首先,Angular分两个阶段运行您的应用程序 - 配置和运行阶段。正如我们所见,配置阶段是您可以根据需要设置任何提供程序的地方。这也是设置指令,控制器,过滤器等的地方。正如您可能猜到的,运行阶段是Angular实际编译DOM并启动应用程序的地方。