2014-11-13 71 views
2

我對angularjs很陌生,並且很難找出這個問題。

基本上,我們正在使用工廠來爲我們的應用程序請求數據。當工廠返回承諾時,我們希望能夠使用在我們的作用域中定義的返回承諾中的數據,但它僅作爲頁面上的文本返回。

例如:

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

因此工廠(getSnapshot)將從$ http請求返回類似 「你好{{名}}」 如下:我們已經在我們的控制器中定義$ scope.name :

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

是否可以允許工廠從$ scope訪問/使用{{name}}?

+0

將它作爲參數傳遞給'getSnapshot'? 'Account.getSnapshot($ scope.name).success(function(data){});' – Brennan

回答

0

您將需要使用內部角$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); 
    }); 
}); 
+0

這似乎是答案!不過,我正在處理從json腳本返回的信息數組。每個數組元素都有一些需要使用$ interpolate函數的索引。這是可以應用於整個數組的東西嗎? –

+0

您將不得不分別插入每個字符串。我不認爲你可以將它應用於整個陣列。 – dfsq

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