我是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}时在视图中,我没有得到任何回应。
有什么解决方案吗?谢谢
答案 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'} }
});
});