从api通过控制器获取变量

时间:2016-05-11 14:25:25

标签: javascript angularjs

我有通过控制器设置和变量的问题。

我创建服务

    app.service('sharedProperties', function () {
    var data = null;

    return {
        setProperty: function(value) {
            data = value;

        },
        getProperty: function () {

            return data;
        }
    };
});

我的控制员:

    app.controller('articleCtrl', function($scope, $http, sharedProperties) {
       $http.get('api/article')
            .then(function(result){
            articleData = result.data;
            $scope.article = articleData;

            sharedProperties.setProperty(articleData.id);

        })});

app.controller('commentsCtrl', function($http, $scope, sharedProperties) {
    id = sharedProperties.getProperty();
    $http.get('api/article/'+id+'/comments')
        .then(function(result){
        commentsList = result.data;
        $scope.comments = commentsList;

    });

我需要" id"从我的commentsCtrl中的文章使用 - 它设置好,但是当我调用sharedProperties.get()时,它仍然返回默认值" null"。

任何想法如何解决这个问题?或者如何在评论控制器中使用文章控制器中的getted id?

非常感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

您可以尝试:

app.service('sharedProperties', function () {

this.data = null;

return {
    setProperty: function(value) {
        this.data = value;

    },
    getProperty: function () {

        return this.data;
    }
};

});

=============编辑=============

好的 - 既然我已经看到了你正在做的事情,那么这并不是最好的做事方式。您应该通过URL中的$ stateParams(或类似的$ params)引用文章的ID。有关示例,请参阅https://github.com/angular-ui/ui-router。基本上,有几种方法可以解决这个问题,因为你目前在你的plunkr中发生了竞争情况(即在你的第二个控制器需要它之前没有设置值)。在理想情况下,您只需拥有$stateParams.id值,即" 1"或者你在路线中定义的任何东西。然后,当您初始化控制器时,只需传入$stateParams,然后您就可以获得值。

您可以执行此操作的第二种方法(如果您需要在初始化控制器之前加载数据),则在路由中设置resolve,以便在加载该状态之前命中api。在这种情况下,您可以在页面加载之前将注释传递给第二个控制器。

我希望这有帮助!