如何让这个对象在AngularJS中打印出来?

时间:2014-06-19 16:00:47

标签: javascript jquery angularjs

我正在研究angularJS中的一个项目,我正在改变我们的系统如何工作一点点,但无论出于何种原因,新的返回没有以角度显示。 这是我的html看起来像..

<button ng-repeat="company in companies" ng-click="setCompany(company)">
                {{ company.name }}
            </button>

此外,这是我的js文件中的一段代码。

 $.post( "/turnup/index.php/app/companies_near", data,
        function(response)
        {
          $scope.companies = JSON.parse(response);
          console.log($scope.companies);
        } );

但无论出于何种原因,它都没有打印出具有以下结构的对象..

[Object]
0: Object
distance: "0.00006317660849859675"
id: "2"
name: "Pi Kappa Alpha - Epsilon Chapter"
__proto__: Object
length: 1
__proto__: Array[0]
concat: function concat() { [native code] }
constructor: function Array() { [native code] }
every: function every() { [native code] }
filter: function filter() { [native code] }
forEach: function forEach() { [native code] }
indexOf: function indexOf() { [native code] }
join: function join() { [native code] }
lastIndexOf: function lastIndexOf() { [native code] }
length: 0
map: function map() { [native code] }
pop: function pop() { [native code] }
push: function push() { [native code] }
reduce: function reduce() { [native code] }
reduceRight: function reduceRight() { [native code] }
reverse: function reverse() { [native code] }
shift: function shift() { [native code] }
slice: function slice() { [native code] }
some: function some() { [native code] }
sort: function sort() { [native code] }
splice: function splice() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
unshift: function unshift() { [native code] }
__proto__: Object

4 个答案:

答案 0 :(得分:1)

这是因为您使用的是jquery而不是angular $ http服务。 Angular没有检测到外部请求(如jquery)请求的变化。如果你想使用jquery而不是$ http,无论出于什么原因你都需要调用$ scope.apply()来告诉angular值值已经改变了。

这应该有效

    $.post( "/turnup/index.php/app/companies_near", data,
        function(response)
        {
             $scope.$apply(function(){
                  $scope.companies = JSON.parse(response);
             });
        });

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$应用

答案 1 :(得分:0)

我相信你必须在HTTP请求完成时在回调中调用$scope.$apply();,否则AngularJS将不会知道任何改变。

如果你使用内置的$http,这将自动发生。

更多详情:http://www.sitepoint.com/understanding-angulars-apply-digest/

答案 2 :(得分:0)

您需要在更新公司后应用您的更改,因为您的帖子超出了角度摘要周期。 所以你做了

$scope.$apply();
在你的任务完成之后

应该这样做。如何尝试解决$ http问题,它将更加清洁和易于使用。

答案 3 :(得分:0)

如果你正在使用角度,肯定更喜欢$ http而不是$ .post:

 $http({ url:'/turnup/index.php/app/companies_near', method:'POST'})
 .success(data) {
      $scope.companies = data;
      console.log($scope.companies);
 });