angularjs – Angular js在预期时不更新dom

前端之家收集整理的这篇文章主要介绍了angularjs – Angular js在预期时不更新dom前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个小提琴,但基本上它正在做什么地理编码输入到文本框的地址.输入地址并按下“enter”后,dom不会立即更新,而是等待文本框的其他更改.如何在提交后立即更新表格?
我对Angular很新,但我正在学习.我发现它很有趣,但我必须学会以不同的方式思考.

这是小提琴和我的controller.js

http://jsfiddle.net/fPBAD/

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;
    })
  }
}
您的问题是地理编码功能是异步的,因此在AngularJS摘要周期之外更新.你可以通过在$scope.$apply的调用中包装你的回调函数解决这个问题.这允许AngularJS知道运行摘要,因为东西已经改变了:
geo.geocode(
  { address : this.text,region: 'no' 
  },status) {
    $scope.$apply( function () {
      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,"long":longitude}
      });
    });
});

猜你在找的Angularjs相关文章