Angular的ui-router无法加载,更不用说解析工厂依赖了
Angular ui-router fails to load let alone resolve factory dependencies
只要我不使用resolve, UI路由器就可以正常工作。我不懂这些把戏。如果你能帮助我理解这个问题,我会很感激的。代码如下:
var myApp = angular.module('myApp', ['ui.router']);
UI Router in action [Not Working] - Console不打印任何东西
myApp.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider.state('state1', {
url: '/',
resolve: {
param1: function (RandomFactory) {
console.log('test');
return RandomFactory();
}
},
controller: 'RandomController',
});
$urlRouterProvider.otherwise("/");
}]);
UI Router [Working] - Console打印。
myApp.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider.state('state1', {
url: '/',
resolve: {
param1: function () {
console.log('test');
return "hello";
}
},
controller: 'RandomController',
});
$urlRouterProvider.otherwise("/");
}]);
工厂myApp.factory('RandomFactory', ['', function () {
return "Hello there";
}])
控制器myApp.controller('RandomController', ['$scope', function ($scope, param1) {
$scope.param = param1;
}]);
我已经看了下面的帖子。
- angular-ui router——继承NAMED dependencies的解析依赖
- Angular ui-router解析命名依赖失败
- Angular-ui-router:用resolve管理依赖
- 在angular ui-router中承诺依赖解析顺序
也许我遗漏了什么,但我已经花了5个多小时在这上面了。
这是一个小提琴- http://jsfiddle.net/kshitij/NPN7T/8/
解决方案
工厂定义中的空字符串是问题所在。尽管框架应该为这种情况定义一个错误,因为它会帮助新手。
请看这里:http://plnkr.co/edit/cyZPh5h1lIYykqrh8Igh?p=preview
var myApp = angular.module('myApp', ['ui.router']);
myApp.factory('RandomFactory', function () {
return "Hello there";
});
myApp.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider.state('state1', {
url: '/state1',
template:"<p>{{param1}}</p>",
controller: function($scope,param1) {
$scope.param1 = param1;
},
resolve: {
param1: function (RandomFactory) {
return RandomFactory;
}
}
});
$urlRouterProvider.otherwise("/state1");
}]);
你在工厂定义中很少有错误,它应该像(remove empty string)
myApp.factory('RandomFactory', [function () {
return "Hello there";
}])
你应该返回RandomFactory而不是执行它当你解析它
resolve: {
param1: function (RandomFactory) {
return RandomFactory;
}
}
在我看来,state1
中的resolve
函数没有被调用,因为你已经给了它一个不存在的依赖注入(RandomFactory
)。
为什么它不存在?您使用['', function() {...}]
的声明方式不正确。如果不想注入任何依赖项,只需省略数组的第一项,而不是使用空字符串。像这样:[function() {...}]
。这是太糟糕了,没有一个好的错误信息,但这似乎是为什么它不能工作。
看这里哪个适合我:
http://plnkr.co/edit/QYfMSV6zdBC0Ra2HiF2Z?p =预览
相关文章:
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- Angularjs工厂注入错误
- 如何将参数传递到angularJs中的工厂
- 为什么只有工厂在棱角分明的网站上被提及
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 如何将本地依赖项添加到npm项目中
- AngularJS:$q.dedefe()不能由工厂方法共享
- AngularJS UI路由器在工厂/服务中使用已解决的依赖项
- 工厂和服务的依赖关系错误
- 工厂、服务和依赖注入在angular.js中到底意味着什么
- Angular的ui-router无法加载,更不用说解析工厂依赖了
- Angular依赖注入——不能实例化工厂/未定义工厂
- 工厂函数的依赖注入(AngularJS)
- 依赖注入工厂模块另一个
- Jasmine单元测试AngularJS工厂的两个依赖项($http和另一个返回promise的工厂)
- AngularJS -服务、工厂、过滤器等的依赖注入
- Jasmine和AngularJS-当函数用作依赖项时,如何测试工厂函数
- 这个工厂依赖问题有什么问题?
- 在AngularJs中通过工厂注入依赖