首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展服务提供者(提供者)

扩展服务提供者(提供者)
EN

Stack Overflow用户
提问于 2014-12-02 11:09:00
回答 1查看 168关注 0票数 2

我正在尝试扩展服务提供者;更具体地说,从ngRoute模块扩展ngRoute

我的扩展提供者如下所示:

代码语言:javascript
运行
复制
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;
    }
}

路由的配置如下所示:

代码语言:javascript
运行
复制
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: '/'
        });
}

我读过这篇文章:

how can i extend a service

但是他们只谈论扩展“工厂”-service

有人能解释一下这里发生了什么吗?帮助是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 11:14:55

为了扩展$routeProvidercustomRoute函数必须返回extended对象:

代码语言:javascript
运行
复制
function customRoute($routeProvider) {

    var extendedProvider = angular.extend({}, $routeProvider, {
        // Customization here
        mergeRoutes: function() {}
    });

    return extendedProvider;
}

之后,您可以例如,新的自定义方法customRouteProvider.mergeRoutes

代码语言:javascript
运行
复制
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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27247932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档