如何从Angular控制器获取变量到视图

时间:2014-07-28 20:53:59

标签: javascript json angularjs

我有一个看起来像这样的控制器:

angular.module('my_app')
  .controller('QueryCtrl', ['$scope', 'Query', function ($scope, Query) {
      $scope.onSubmit = function() {
          var json = $.post('http://162.243.232.223:3000/api/query', { 'input': 'my_input' });
          console.log(json);
          $scope.queries = json;
        };
      }
   ])

一个看起来像这样的观点:

<div ng-controller="QueryCtrl">

  <form ng-submit="onSubmit()" >
    <textarea ng-model="query_box" name="my_input"></textarea>
    <button type="submit">Submit</button>
  </form>
  {{ queries }}
  <ul ng-repeat="query in queries">
    <li>{{query}}</li>
  </ul>

</div>

问题在于,当我单击提交按钮时,javascript控制台成功记录了正确的json对象,该对象具有属性

responseJSON

您可以通过查找

来仔细查看我想要的对象
$.post('http://162.243.232.223:3000/api/query', { 'input': 'my_input' });

自己进入javascript控制台并查看对象。

但是,在视图中,当我打印出“queries”对象时,它似乎没有responseJSON属性,只有readyState属性。

我的json对象的其余部分在哪里?

4 个答案:

答案 0 :(得分:1)

 var projectangular.module('my_app')
  .controller('QueryCtrl', ['$scope', 'Query', function ($scope,$http, Query) {
      $scope.onSubmit = function() {
          $http.post('http://162.243.232.223:3000/api/query', { 'input': 'my_input' }).then(

            //sucess
            function(response){

           angular.copy(response ,$scope.queries);
           console.log(json);

            },
            //error
            function(){
              alert("cant post");

            });

        };
      }
   ])

答案 1 :(得分:1)

尝试这样的事情:

$scope.onSubmit = function() {
      var json = $.post('http://162.243.232.223:3000/api/query', { 'input': 'my_input' });
      json.done(function(result){
         $scope.result = result;
         $scope.$apply();
      })

      console.log(json);
      $scope.queries = json;
    };
  }

<div>{{result}}</div>

答案 2 :(得分:1)

正如CAT评论的那样,你从.post获得的是一个承诺对象。您必须等待发布请求完成(失败或成功)。以下语法可能很少。我只是在飞行中输入它。

angular.module('my_app').controller('QueryCtrl', ['$scope', 'Query', function ($scope, Query) {
    $scope.onSubmit = function() {
        var json = $.post('http://162.243.232.223:3000/api/query', { 'input': 'my_input' }).then(function(response){
            console.log(response.data);
            $scope.queries = response.data;
            $scope.$apply();
        }, function(response){
            console.log(response.data);
            $scope.queries = response.data;
            $scope.$apply();
        });
    };
}])

答案 3 :(得分:0)

由于承诺系统以及如何在控制台中打印对象,它们是通过引用而不是按值打印的。尝试做一个字符串而不是对象的console.log(JSON.stringify(json)),你会发现你缺少responseJSON属性。您的responseJSON属性可能会在将来附加到该对象,但console.log(Object)将打印它的当前值,即使您在使用console.log后添加了该值。