2017-03-21 33 views
0

我已经写下了html和控制器代码,用于将表格单元格值设置为地理位置代码地址,但它不起作用。无法从角度控制器设置表格单元值

<tr ng-repeat="x in tabledata"> 
    <td>{{ x.id }}</td> 
    <td>{{x.lat}}</td> 
    <td>{{x.lng}}</td> 
    <td ng-if="ctrl.getAddress(x.lat,x.lng)">{{addr}}</td> 
</tr> 

控制器方法如下。

this.getAddress = function(lat,lng) { 
     console.log('x.lat ' + lat + ' x.lng ' + lng); 
     var p = new Promise(function(resolve,reject){ 
      var address; 
      var geocoder = new google.maps.Geocoder; 
      geocoder.geocode({'location': {lat: parseFloat(lat), lng: parseFloat(lng)}}, function(results, status) { 
       if (status === 'OK') { 
        if (results[0]) { 
         resolve(results[0].formatted_address); 
        } else { 
         resolve('No results found'); 
        } 
       } else { 
        reject('Geocoder failed due to: ' + status); 
       } 
      }); 
     }).then(function(v){ 
      console.log('Resolved - Geo coder address ' + v); 
      $scope.addr = v; 
      $scope.apply; 
     }).catch(function(v){ 
      console.log('Catch - Geo coder address ' + v); 
     }); 

     return true; 
    }; 

我得到的地址值,但它没有得到分配给地址变量。

+0

我认为这是因为addr变量是Promise函数的局部变量。你有没有尝试把它作为一个全局变量在控制器中?功能中未使用地址变量 – Chinito

+0

。 addr在html代码中的表达式中是可变的,并且通过$ scope引用。 –

+0

哦!好的。这就是为什么:D不能在没有变量声明的情况下访问控制器中的html变量。所以你必须首先在你的控制器中初始化它 – Chinito

回答

0

我可以解决这个问题如下。

1)在控制器函数的tabledata中增加了一个名为addr的属性。

2)从geocode API获取地址值后,我将它的值设置在tabledata中。