Angularjs 更新$scope,摘要正在进行中

Angularjs 更新$scope,摘要正在进行中,angularjs,Angularjs,这个问题已经被问过很多次了。 但是,在尝试了很多事情之后,我仍然有这个问题 我有一个搜索按钮在角度单页。参数正在变细,并按如下方式记录console.log(“seared:”+search.term) 然后我使用这个术语使用REST查询我的数据库,结果很好。一切都好 现在,我想用这些新结果更新$scope数据。通过添加$scope.$apply()和使用$timeout以及使用$digest,我可以让treid做到这一点 这一切都让我产生了一个错误:$digest已经在进行中了 然后我使用$s

这个问题已经被问过很多次了。 但是,在尝试了很多事情之后,我仍然有这个问题

我有一个搜索按钮在角度单页。参数正在变细,并按如下方式记录
console.log(“seared:”+search.term)

然后我使用这个术语使用REST查询我的数据库,结果很好。一切都好

现在,我想用这些新结果更新$scope数据。通过添加
$scope.$apply()
和使用
$timeout
以及使用
$digest
,我可以让treid做到这一点

这一切都让我产生了一个错误:$digest已经在进行中了

然后我使用$scope.$watch,这样就可以了,我用警报对它进行了测试,但数据在我的浏览器中从未改变过

'use strict';

// Declare app level module which depends on views, and components
angular.module('Grep GUI', [
  'ngRoute',
  'myApp.view1',
  'myApp.view2',
  'myApp.version'
]).
config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
  $locationProvider.hashPrefix('!');

  $routeProvider.otherwise({redirectTo: '/view1'});
}]).
controller('DataBeest', function($scope, $http) {

    $http.get('http://localhost:8529/_db/grep/grepdata/huizen').
            then(function(response) {
                $scope.greeting = response.data;
            });

    $scope.search = function(search) {
      console.log("searched: " + search.term);

      $http.get('http://localhost:8529/_db/grep/zoek/zoek/' + search.term).
        then(function(response) {
                    $scope.greeting = response.data;
                    $scope.$digest()
        });
    }
});
index.html

<!DOCTYPE html>
<!--[if lt IE 7]>      <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html lang="en" ng-app="myApp" class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" ng-app="grep GUI" class="no-js"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>My AngularJS App</title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/normalize.css">
  <link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/main.css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <link rel="stylesheet" href="app.css">
  <script src="bower_components/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js"></script>
</head>
<body>

  <div class="navbar navbar-inverse navbar-static-top" role="navigation">

      <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" rel="home" href="/" title="grep Crawler">/Grand Theft grep</a>
      </div>

      <div class="collapse navbar-collapse navbar-ex1-collapse">

          <ul class="nav navbar-nav">
              <li><a href="/alle_data">/alle_data</a></li>
              <li><a href="/alle_plaatjes">/alle_plaatjes</a></li>
              <li><a href="/nog_wat">/nog_wat</a></li>
          </ul>

          <div class="col-sm-3 col-md-3 pull-right"  ng-controller="DataBeest">
          <form class="navbar-form" role="search">
          <div class="input-group">
              <input type="text" class="form-control" placeholder="Zoek" name="srch-term" id="srch-term" ng-model="search.term">
              <div class="input-group-btn">
                  <button class="btn btn-default" type="submit" ng-click="search(search)"><i class="glyphicon glyphicon-search"></i></button>
              </div>
          </div>
          </form>
          </div>

      </div>

  </div>

<div class="container" ng-controller="DataBeest">
  {{ greeting }}
</div>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/angular-route/angular-route.js"></script>
  <script src="app.js"></script>
  <script src="components/version/version.js"></script>
  <script src="components/version/version-directive.js"></script>
  <script src="components/version/interpolate-filter.js"></script>
</body>
</html>

我的AngularJS应用程序
切换导航
{{问候语}
好的,找到了,我在视图中重新使用了控制器,这使它变得不可靠

您使用的是使用
$http
服务的本机angular AJAX,那么为什么需要
$scope.$digest()
?我认为您可以删除$scope.$digest(),您应该能够在问候语
$scope.$apply
$scope.$digest
下看到修改后的值。只有在angular不知道的情况下更新数据时,才需要这些。看起来你的问题更多的是搜索中的响应;您是否已将其记录下来以验证其是否具有所需的数据?如果您必须像现在这样使用不必要的
$scope.$digest()
,您可以尝试使用
$timeout
,但是再一次-你不需要它与你的当前代码我也认为这应该是'自动'两个REST调用返回数据在相同的格式,所以这应该是确定的,与邮递员测试。但是当我记录response.data时,看起来我只有数组的第一个对象。我将重写视图,然后更新我的问题。