使用api在angularJS中获取未定义的$ scope

时间:2015-04-17 01:47:34

标签: angularjs

我是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并且视图可以显示客户的价值,但是当我想要显示{{1}时在视图中,我没有得到任何回应。

有什么解决方案吗?谢谢

2 个答案:

答案 0 :(得分:0)

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

如果上述语句正在发出服务请求并从服务器获取数据。这将是异步的,并且无法获得。

但是在下一个声明中,你正在设置

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

此时,$scope.customer可能未定义。这就是为什么你没有得到这个价值的原因。

您必须将此声明放在承诺then()

$scope.test = $scope.customer.Id;函数中

因此,在您的服务中,使用$http$q返回承诺。在您的控制器中:

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

另一种解决方法是:

最初设置

$scope.customer = {};

答案 1 :(得分:0)

这也是我的服务我使用$ resource:

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