Angular $范围未在HTML中显示正确的数据

时间:2015-01-27 20:46:19

标签: javascript html angularjs

我有一个cordova应用程序,我想在其中显示一个位置的详细信息。出于某种原因,当我尝试在HTMl中显示一个在JS中成功分配的变量时,没有任何内容出现。

JS控制器:

app.controller('placeCtrl', function($scope, LocDat){
  LocDat.async().then(function(d){
    $scope.item= places.selectedItem;  
    $scope.locs = [];
    for(var i=0; i<d.length; i++){
      if(d[i].attributes.Joint.id === places.selectedItem.id){
        getDistance(d[i]);
        $scope.locs.push(d[i]);
      }
    }

    $scope.showSite = function(){
    //var ref = navigator.app.loadUrl($scope.item.attributes.Website, '_blank');
    var ref = window.open($scope.item.attributes.Website,'_blank','location=yes');
  }

  $scope.showDetail = function(index){
    var selectedItem = d[index];
    d.selectedItem = selectedItem
    $scope.l = selectedItem;
    console.log($scope.l.attributes.City);
    $scope.ons.navigator.pushPage('location_detail.html', { title : d.selectedItem.attributes.Address });
  }
});

HTML:

<!DOCTYPE html>

<html>
    <body>
        <div ng-controller="placeCtrl">
            <ons-page class="center" ng-device-backbutton="myNavigator.popPage()">
                <ons-toolbar>
                  <div class="left"><ons-back-button ons-if-platform="ios">Back</ons-back-button></div>
                  <div id="title" class="center">{{l.attributes.City}}, {{l.attributes.State}}</div>
                  <!--<div class="left" onclick=".myNavigator.popPage()"><ons-back-button>Back</ons-back-button></div>-->
                  <!--<div class="center">Page 2</div>-->
                </ons-toolbar>
                <h2 align="center">Location Details Go Here</h2>
                <!--enter more content here-->
            </ons-page>
        </div>
    </body>
</html>

控制台输出图像:

显然我的声誉太低,无法发布图片......说真的?无论如何,它成功地在控制台中显示城市名称,但html仅显示逗号

3 个答案:

答案 0 :(得分:1)

进行异步调用的服务(例如LocDat)在返回时不会自动触发摘要事件。如果您正在编写服务,则应调用$ scope。$ apply()链接到promise的末尾。或者,您可以在apply中包含对$ scope变量的任何更改,这样您就可以获得所需的更新。

$scope.$apply( function() { $scope.l = selectedItem; } );

答案 1 :(得分:0)

在angularjs数据绑定中,如果数据类型是列表或对象,它将在视图中通过引用值传递。

当你喜欢$scope.l = selectedItem时,引用会被更改,但被监视的引用是前一个引用。因此,通过对象的属性绑定总是更好,而不是对象本身。喜欢:
<div id="title" class="center">{{obj.l.attributes.City}}, {{obj.l.attributes.State}}</div>

并在控制器中更新:
$scope.obj.l = selectedItem;

答案 2 :(得分:0)

问题是当我加载新页面时范围发生了变化。我现在通过onsenui的pushpage函数的参数传递数据,并将它们分配给单独控制器中的范围变量。