2015-04-17 46 views
-1

我是angularJS中的新成員,並且遇到了一個小問題: (我會解釋一些細節) 我有一個在Azure中部署的SQL數據庫,來自Web服務的數據。

當我想從數據庫中檢索數據並將它暴露在視圖中時,它可以工作。

這是控制器:

var app = angular.module('ngdemoApp.controllers', []);  
app.controller('CustomerViewCtrl', ['$scope', '$routeParams', 'ShowCustomerFactory','LikeProfilCustomerFactory','ShowManagerFactory', 
           function ($scope, $routeParams, ShowCustomerFactory,LikeProfilCustomerFactory,ShowManagerFactory) { 
           $scope.incrementLikeProfil = function (id) {      LikeProfilCustomerFactory.likeProfil({id:$scope.customer.Id}); 
             $scope.customer = ShowCustomerFactory.show({id: $routeParams.id}); 
            } 

            $scope.customer = ShowCustomerFactory.show({id: $routeParams.id});  
           }]); 

通知顧客是在數據庫中,以便它在其他字的屬性,如果我做{{customer.Id}}這個表達式表明我的觀點的價值。

然而,當我想使用$scope.customer在控制器這樣

app.controller('CustomerViewCtrl', ['$scope', '$routeParams', 'ShowCustomerFactory','LikeProfilCustomerFactory','ShowManagerFactory', 
           function ($scope, $routeParams, ShowCustomerFactory,LikeProfilCustomerFactory,ShowManagerFactory) { 


            $scope.incrementLikeProfil = function (id) { 

             LikeProfilCustomerFactory.likeProfil({id:$scope.customer.Id}); 
             $scope.customer = ShowCustomerFactory.show({id: $routeParams.id}); 
            } 

            $scope.customer = ShowCustomerFactory.show({id: $routeParams.id}); 

            $scope.test = $scope.customer.Id; 

           }]); 

$scope.test不能通過$scope.customer.Id填補,在$scope.customer填充相同的時間和視圖可以顯示客戶的價值但是當我想在視圖中顯示$scope.test時,我沒有收到任何回覆。

有沒有解決方法?謝謝

+0

我們不知道你在說什麼。給我們的代碼錯誤來自 – floribon

+0

請不要發佈您的問題,直到你已經包含了我們需要解決您的問題所需的所有細節。這個問題目前缺乏所有這些細節,還沒有實際的問題。 – GregL

+0

現在可以嗎?我認爲現在很清楚,我很快就需要幫助,因爲我必須在星期三之前完成我的項目。 –

回答

0
$scope.customer = ShowCustomerFactory.show({id: $routeParams.id}); 

如果上述語句正在提出服務請求並從服務器獲取數據。這將是異步的並且不可用。

但在接下來的語句本身,要設置

$scope.test = $scope.customer.Id; 

在這個時間點,$scope.customer可能是不確定的。這就是爲什麼你沒有獲得價值。

你必須把這個聲明承諾$scope.test = $scope.customer.Id;

所以在您的服務then()功能,採用$http$q返回承諾。而在你的控制器:

ShowCustomerFactory.show({id: $routeParams.id}).then(function(data) { 
      $scope.customer = data; 
      $scope.test = $scope.customer.id; 
    }); 

另一種解決方法是:

最初設定

$scope.customer = {}; 
+0

'$ scope.customer = {};'仍然給未定義的'id',所以不是答案。我會限制答案使用'then()' –

+0

是的,最初它將是未定義的。但是,一旦客戶對象從服務中獲取數據,它就會有數據。 – mohamedrias

+0

其實我不知道我會在哪裏使用() –

0

而且,這裏是我的服務,我使用$資源:

services.factory('ShowCustomerFactory', function ($resource) { 
    return $resource(url + '/customerService/getCustomer?id=:id', {}, { 
     show: { method: 'GET',params: {id: '@id'} } 
    }); 
}); 
相關問題