我正在尝试将值设置为控制器上的角度服务并从另一个角度获取,但该服务不保留该值。
App.js
var app = angular.module('Test', []);
app.service('editorPost', function() {
this.ID = -1;
this.setID = function(ID) {
this.ID = ID;
};
this.getID = function() {
return this.ID;
};
});
第一个控制器
app.controller('DashboardController', ['$scope','editorPost',
function ($scope, editorPost) {
$scope.loadEditor = function(link)
{
editorPost.setID(link.post.ID);
// Displays the correct ID, obtained from the <a> clicked.
console.log(editorPost.getID());
};
}]);
loadEditor函数被调用如下:
<a href="/editor/editor.html" ng-click="loadEditor(this)">{{ post.webStory }}</a>
在console.logging值之后,它将重定向到editor.html并显示服务的默认ID值。
第二个控制器(来自editor / editor.html的控制器):
app.controller('EditorController', ['$scope','editorPost',
function ($scope,editorPost)
{
$scope.globals = globals;
//Displays the default value, -1.
console.log(editorPost.getID());
});
提前谢谢。
答案 0 :(得分:1)
我会说最好的可能是将函数传递给服务,就像回调一样,如下所示
<强> // EditorController 强>
editorPost.getID (function(data){
console.log(data);
});
进入服务而不是使用返回,你需要类似下面的内容
app.service('editorPost', function() {
this.ID = -1;
this.setID = function(ID) {
this.ID = ID;
};
this.getID = function(callback) {
callback(this.ID);
};
});
答案 1 :(得分:1)
当您进入服务中的方法时,这是指该方法,而不是服务。将您的服务更改为:
app.service('editorPost', function() {
var service = this;
service.ID = -1;
service.setID = function(ID) {
service.ID = ID;
};
service.getID = function() {
return service.ID;
};
return service;
});
实际上,这是一个问题。第二个问题是您将使用href访问新的HTML页面。我猜你正在重新加载角度和你的应用程序,重新实例化服务并将id设置回其默认值。在这种情况下,您确实需要使用angular作为SPA,否则您需要将ID作为URL参数传递并从那里获取它。