可以't更新angular.js中的变量

Can't update variable in angular.js

本文关键字:js 变量 angular 更新 可以      更新时间:2023-09-26

我正在用angular.js构建一个Ionic应用程序,我几乎完成了,但现在我遇到了一个小麻烦。

在我的templates/menu.html中,我有:

<ion-item nav-clear menu-close ng-click="filterByPeriod(weekBegin, currentDate)">Filter  </ion-item>

和我的控制器js:

.controller('Home', ['$scope', '$ionicModal', '$cordovaGeolocation', function($scope, $ionicModal, $cordovaGeolocation) {
  App = {
    init: function() {
      setTimeout(function(){
        $scope.map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
      }, 200);
    },
  };
  $scope.addMarkersToMap = function(reports, map) {
    var newCenter = new google.maps.LatLng(reports[0].latitude, reports[0].longitude);
    map.setCenter(newCenter);
    map.setZoom(12);
  }
  $scope.filterByPeriod = function(beginDate, endDate) {
    var cityId = window.localStorage.getItem('cityId');
    serviceReports.getDenunciasFromPeriod(cityId, beginDate, endDate)
    .success(function(reports){
      $scope.addMarkersToMap(reports.dados, $scope.map);
    });
  }
  App.init();
}]);

我已经尝试使用封装此方法的`$scope.apply(function(){})来完成此操作,但通过两种方式我都会捕获此错误:

http://cl.ly/image/200O1d2F1C46

有人知道如何解决这个问题吗?

未定义$scope.map。可能是你没有从谷歌地图库中得到任何东西,或者它还没有填充数据。您可能希望使用promise来使用变量或禁用按钮,直到数据存在为止。

映射对象未正确初始化。我怀疑你的document.getElementById("map canvas")在控制器中不应该正确工作:DOM操作与角度摘要循环不同步。

更喜欢使用指令,你可以看看我是怎么做的:

https://github.com/bennekrouf/ng-formation/blob/master/app-directives/app/app.js