我正在尝试扩展服务提供者;更具体地说,从ngRoute模块扩展ngRoute
我的扩展提供者如下所示:
angular
.module('myapp')
.provider('customRoute', customRoute)
function customRoute($routeProvider) {
var extendedProvider = angular.extend({}, $routeProvider, {
// Customization here
});
// These will print almost identical objects
console.log(extendedProvider);
console.log($routeProvider);
this.$get = function() {
return extendedProvider;
}
}
路由的配置如下所示:
angular
.module('myapp')
.config(Routes);
function Routes(customRouteProvider, $routeProvider) {
/* This will print an object that looks the same as
the ones printed in the provider definition */
console.log($routeProvider);
/* This object does not look like the $routeProvider any more :( */
console.log(customRouteProvider);
customRouteProvider
.when('/', {
templateUrl: 'path/to/some/template.html',
controller: 'SomeController',
})
.otherwise({
redirectTo: '/'
});
}
我读过这篇文章:
但是他们只谈论扩展“工厂”-service
有人能解释一下这里发生了什么吗?帮助是非常感谢的。
发布于 2014-12-02 11:14:55
为了扩展$routeProvider
,customRoute
函数必须返回extended对象:
function customRoute($routeProvider) {
var extendedProvider = angular.extend({}, $routeProvider, {
// Customization here
mergeRoutes: function() {}
});
return extendedProvider;
}
之后,您可以例如,新的自定义方法customRouteProvider.mergeRoutes
。
customRouteProvider
.when('/', {
templateUrl: 'path/to/some/template.html',
controller: 'SomeController',
})
.otherwise({
redirectTo: '/'
})
.mergeRoutes({ ... });
演示 to play:http://plnkr.co/edit/mht94RFLScz2jHCwPcai?p=preview
出于您的目的,您不需要处理this.$get
,只需向$routeProvider
添加一些新方法即可。this.$get
返回相应提供者服务的服务对象实例/构造函数($routeProvider
情况下的$route
)。
https://stackoverflow.com/questions/27247932
复制相似问题