首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GET和SET中使用AngularJS提供程序

在GET和SET中使用AngularJS提供程序
EN

Stack Overflow用户
提问于 2015-05-13 10:12:00
回答 1查看 1.1K关注 0票数 1

my last question中,我确实搜索了一个解决方案,以便在.config期间使用AngularJS中的值。我学会了我必须使用一个提供者。现在,我尝试使用这个提供程序来设置一个值。似乎提供者有一个限制,我只能在.config期间设置一些东西?我得到了错误"TypeError: appState.setState不是函数“,但是setState是一个函数,至少对我的理解是这样的。我错了?

守则:

代码语言:javascript
复制
angular
    .module('main', [
        'ngRoute'
    ])

    .provider('appState', function(){
        var appState;

        this.setState = function(newState) {
            appState = newState;
        };

        this.getState = function() {
            return appState;
        };

        this.$get = function() {
            return appState;
        };

        function init() {appState='/home';}
        init();

    })
    .config(function($routeProvider, appStateProvider){

        $routeProvider
            .when('/home', {
                templateUrl: "partials/home"
            })
            .when('/info', {
                templateUrl: "partials/info"
            })
            .otherwise({
                redirectTo: appStateProvider.getState()
            })

    })

    .run(function ($rootScope, appState) {

        $rootScope.$on('$routeChangeStart', function (event, next, current) {
            if (next.$$route) {
                appState.setState(next.originalPath); 
                // -> ERROR: "TypeError: appState.setState is not a function"
            }
        })

    })

;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 10:39:04

提供者就像一个两部分的服务,它的最低形式就像一个工厂:

代码语言:javascript
复制
aModule.provider('foo', function() {
  this.$get = function() {
    return 1;
  }
});

然后,您可以将其插入到任何其他服务、指令、控制器和run函数中:

代码语言:javascript
复制
aModule.controller('BarCtrl', function(foo) { ... });

注意我是如何使用foo作为提供程序的名称的。

它所做的就是将$get 返回的注入控制器。也就是说,如果在控制器中记录foo,就会得到1

那么提供者有什么意义呢?能够在应用程序运行之前配置服务。

代码语言:javascript
复制
aModule.provider('foo', function() {
  var appState;

  this.setState = function(newState) {
    appState = newState;
  }  

  this.$get = function() {
    return appState;
  }
});

在这种情况下,除了$get函数之外,我们还有其他一些函数。我们怎样才能使用它们?我们需要注入提供者本身和,而不是工厂在里面。我们怎么能做到呢?

代码语言:javascript
复制
aModule.config(function(fooProvider) {
  fooProvider.setState('Hello');
}

注意我这次是如何使用fooProvider而不是只使用foo的。上面写着我在注射提供者本身。也就是说,只能将提供程序注入到.config函数和其他提供程序的构造函数中。

现在,如果您在控制器中记录foo,我们会看到:hello

重复一遍,您在控制器中注入的是$get返回的内容,而不是外部的其他方法。这就是为什么不能在setState上使用run的原因,因为注入的是$get返回的内容。

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

https://stackoverflow.com/questions/30211779

复制
相关文章

相似问题

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