AngularJS不具有值

时间:2016-05-18 14:43:50

标签: angularjs service controller

我正在尝试将值设置为控制器上的角度服务并从另一个角度获取,但该服务不保留该值。

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());
});

提前谢谢。

2 个答案:

答案 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参数传递并从那里获取它。