Angularjs 为什么我需要美元符号来抑制服务?

Angularjs 为什么我需要美元符号来抑制服务?,angularjs,Angularjs,我想获得一个故事值服务,该服务应该在一些控制器上提供,考虑到这篇文章: 一切都好。但是:我希望这项服务能在更深层次的控制器功能中提供。以下是我的例子: app.service('activeMovie', function() { var movie = { rating: 100 }; return { getData: function() { return movie; },

我想获得一个故事值服务,该服务应该在一些控制器上提供,考虑到这篇文章:

一切都好。但是:我希望这项服务能在更深层次的控制器功能中提供。以下是我的例子:

app.service('activeMovie', function() {
    var movie = {
        rating: 100
    };


    return {
        getData: function() {
            return movie;
        },
        setRating: function(value) {
            movie.rating = value;
            console.log("neues Rating" + movie.rating);
        },            
        setData: function(pData) {
            movie = pData;
        }
    };
});
这是控制器:

app.controller('MoviesController', function($http, $sce, activeMovie) {
    var refresh = function(activeMovie) {
        // ...
        console.log("Test Service at refresh:" + activeMovie.getData().rating); // WORKS
    };
    refresh(activeMovie);

    this.setActive = function(id, $activeMovie) {
        $http.get('movies/'+id).success(function(response) {
           // ...
        });
         console.log("Test Service at setActive:" + activeMovie.getData().rating); // WORKS only with the $-sign in the header
    };
}

我是怎么做到的。。如果在第二个函数中不使用$-符号,angularJS将抛出一个错误。显然,在使用$符号时,我不必将参数'activeMovie'传递给函数。。但是为什么呢?

这在一定程度上讲得通@Claies。。。如果OP将参数命名为与注入的服务相同的参数,则它们将失去访问服务的函数内的作用域service@MonMoon ... 您的问题与javascript闭包有关。当函数内部有一个与函数外部变量同名的局部变量时。。。你不能访问外部的一个你可以把它命名为baloney,它也会工作的。功能ID,胡扯{。问题是,如果将其命名为activeMovie,它将完全在该内部上下文中取代注入控制器的服务。这会使您对控制器的作用域感到困惑。我假设在控制器中使用此名称,您的控制器将与您的视图中一样。无论如何,它似乎都按照此小提琴工作:。然而有一件事需要注意。为什么要将自定义服务传递到方法中?没有必要这样做。控制器中的任何地方都可以使用注入的服务。我想象你在某个地方意外地过度编写了服务。没有必要用闭包包包包住东西,也应该将$http移动到服务中。我基本上是这样的当我重新阅读我添加的第一条评论时,我明白了OP在说什么。这里的问题和前提只是混淆了。