angularjs – 来自解析对象的属性未传递给控制器​​,未知提供程序错误

前端之家收集整理的这篇文章主要介绍了angularjs – 来自解析对象的属性未传递给控制器​​,未知提供程序错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在投票之前,是的,这个问题已经在这里被提出并回答了,但答案并不令人满意.他们都正确地建议在路由配置中添加控制器,但这不是这种情况.

routeProvider的解析对象xxx的预期行为将被注入控制器:

var app = angular.module('X',[])
.config(['$routeProvider',function ($routeProvider) {
    $routeProvider.when('/',{
        controller:'XCtrl',templateUrl: 'x.html',resolve: {
            xxx: function () {
                return 'XXX from routing config.';
            }
        }
    })
}])
.controller('XCtrl',function($scope,xxx) {
    console.log('xxx = '+xxx);
});

控制台应该从路由配置获得xxx = XXX.条目.

相反,上面的代码提取失败了:

Error: [$injector:unpr] Unknown provider: xxxProvider <- xxx
http://errors.angularjs.org/1.2.10/$injector/unpr?p0=xxxProvider%20%3C-%20xxx
 .. etc.

XCtrl未在HTML中使用ng-controller指令声明,但仅在路由配置中定义.

解决方法

如果使用同一控制器在路由配置中有多个条目,则在控制器中注入的所有属性都必须出现在resolve对象的所有实例中:

var app = angular.module('X',function ($routeProvider) {
    $routeProvider
    .when('/',resolve: {
            xxx: function () {
                return 'XXX from routing config.';
            }
            another: // ...
        }
    })
    .when('/page2',templateUrl: 'x/p2.html',xxx) {
    console.log('xxx = '+xxx);
});

解析对象不一定是promises,从上面的函数返回的直接数据也可以工作.如果其中一个被拒绝,则Promise可用于阻止路由.

猜你在找的Angularjs相关文章