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在说什么。这里的问题和前提只是混淆了。