Angularjs Angular js未按预期更新dom

Angularjs Angular js未按预期更新dom,angularjs,Angularjs,我有一个小提琴,但基本上它做的是地理编码的地址是输入到一个文本框。输入地址并按下“enter”后,dom不会立即更新,而是等待对文本框的另一次更改。如何让它在提交后立即更新表? 我是个新手,但我正在学习。我觉得这很有趣,但我必须学会用不同的方式思考 这是小提琴和我的controller.js 您的问题是geocode函数是异步的,因此在AngularJS摘要周期之外进行更新。您可以通过将回调函数包装在对$scope.$apply的调用中来修复此问题,该调用允许AngularJS运行摘要,因为内

我有一个小提琴,但基本上它做的是地理编码的地址是输入到一个文本框。输入地址并按下“enter”后,dom不会立即更新,而是等待对文本框的另一次更改。如何让它在提交后立即更新表? 我是个新手,但我正在学习。我觉得这很有趣,但我必须学会用不同的方式思考

这是小提琴和我的controller.js


您的问题是
geocode
函数是异步的,因此在AngularJS摘要周期之外进行更新。您可以通过将回调函数包装在对
$scope.$apply
的调用中来修复此问题,该调用允许AngularJS运行摘要,因为内容已更改:

geo.geocode(
{地址:this.text,
地区:'否'
},功能(结果、状态){
$scope.$apply(函数(){
var address=results[0]。格式化的\u地址;
var latitude=结果[0]。geometry.location.hb;
var longitude=结果[0]。geometry.location.ib;
$scope.locations.push({
“name”:地址,id:$scope.nextId++,
“坐标”:{“纬度”:纬度,“长”:经度}
});
});
});

谢谢,这正是我需要的。学到了一些新的东西。嗨,我有完全相同的问题,但我正在尝试在指令和$scope中完成它。$apply在那里对我不起作用。我不知道我是否错过了什么。请帮帮我。@Rober你能发一张扑克牌吗?@Josh Davidimller:给你。如您所见,地理代码在创建中心和地图后执行。这就是为什么标记位于正确的点,但中心不在那里,而是在赫塔菲(另一个城市)。
var myApp = angular.module('geo-encode', []);

function FirstAppCtrl($scope, $http) {
  $scope.locations = [];
  $scope.text = '';
  $scope.nextId = 0;

  var geo = new google.maps.Geocoder();

  $scope.add = function() {
    if (this.text) {

    geo.geocode(
        { address : this.text, 
          region: 'no' 
        }, function(results, status){
          var address = results[0].formatted_address;
          var latitude = results[0].geometry.location.hb;
          var longitude = results[0].geometry.location.ib;

          $scope.locations.push({"name":address, id: $scope.nextId++,"coords":{"lat":latitude,"long":longitude}});
    });

      this.text = '';
    }
  }

  $scope.remove = function(index) {
    $scope.locations = $scope.locations.filter(function(location){
      return location.id != index;
    })
  }
}