从$ http请求angular中引用$ scope变量

时间:2014-11-13 22:12:41

标签: javascript angularjs

我对angularjs很新,我很难找到这个问题。

基本上,我们正在使用工厂为我们的应用程序请求数据。当工厂返回一个promise时,我们希望能够使用在我们的作用域中定义的返回promise中的数据,但它只能在页面上作为文本返回。

例如:我们在控制器中定义了$ scope.name:

app.controller('AccountController',function($scope,Account) {
    $scope.name = 'Abby';
    $scope.news = [];
    Account.getSnapshot().success(function(data) {
        $scope.news.push(data);
    });
});

所以工厂(getSnapshot)将从$ http请求中返回类似“Hello {{name}}”的内容,如下所示:

app.factory('Account',function($http) {
    return {
        getSnapshot : function() { 
            return $http.get('data.php'); 
        }
    }
});

是否可以允许工厂从$ scope?

访问/使用{{name}}

2 个答案:

答案 0 :(得分:0)

您需要使用内部Angular $interpolate服务:

app.controller('AccountController', function($scope, $interpolate, Account) {
    $scope.name = 'Abby';
    $scope.news = [];
    Account.getSnapshot().success(function(data) {
        var text = $interpolate(data)($scope);
        $scope.news.push(text);
    });
});

答案 1 :(得分:0)

使用$qpromises感谢@ dfsq在我的帖子中的答案,与此相似。效果很好。

Here's a plunker

// Factory method.
app.factory('Account', function($http, $q) {

    var data;

    return {
        getSnapshot: function() {
            return data ? $q.when(data) : $http.get('data.json').then(function(response) {
                data = response.data;
                return data;
            })
        }
    }
});

// Controller method.
app.controller('AccountController', function($scope, Account) {
    $scope.name = 'Abby';
    $scope.news = [];
    Account.getSnapshot().then(function(data) {
        $scope.news = data;
    });
});