【问题标题】:AngularJS: How to set $scope.var in a view only after the $scope.var is set?AngularJS:如何在 $scope.var 设置后才在视图中设置 $scope.var?
【发布时间】:2013-12-05 19:24:46
【问题描述】:

我的角度视图如下所示:

<li ng-repeat="n in range(newsList.length)" ng-class="{active: n == paging}" ng-click="setPage()">
                    <a href ng-bind="n + 1">1</a>
                </li>

现在问题出在newsList,只有在发送$http 请求并收到响应后才设置该范围。像这样:

$http.get('news/listings/' + ($scope.currentPage*$scope.itemsPerPage) + '/' + (($scope.currentPage+1)*$scope.itemsPerPage)).success (response) ->
    $scope.newsList = response

真正的问题是,在设置$scope.newsList 之前,视图首先呈现,视图中的变量是undefined。如何告诉视图我要在设置了$scope.newsList 之后才渲染那些li

顺便说一句,我在创建视图的控制器中调用 $http 请求。

编辑 在我的控制器中,如果我输出 $scope.newsList 值会发生这种情况

$http.get('news/listings/' + ($scope.currentPage*$scope.itemsPerPage) + '/' + (($scope.currentPage+1)*$scope.itemsPerPage)).success (response) ->
        $scope.newsList = response
        alert $scope.newsList //returns object, which I want

alert $scope.newsList //undefined

再次编辑

解决了我的问题,但提出了另一个问题(连同此问题的解决方案):here

【问题讨论】:

  • 简单地显示它们:ng-show="newsList",可能吗?
  • 已将我的代码更新为 &lt;li ng-show="newsList" ng-repeat="n in range(newsList.length)" ng-class="{active: n == paging}" ng-click="setPage()"&gt; &lt;a href ng-bind="n + 1"&gt;1&lt;/a&gt; &lt;/li&gt;,但仍然无法正常工作

标签: javascript angularjs coffeescript


【解决方案1】:

要么用空数组初始化$scope.newsList

$scope.newList = [];
$http.get(...

或在您的视图中使用ngIf

<ul ng-if="newsList.length">
  <li 
    ng-repeat="n in range(newsList.length)" 
    ng-class="{active: n == paging}" 
    ng-click="setPage()"
  >
    <a href ng-bind="n + 1">1</a>
  </li>
</ul>

【讨论】:

    【解决方案2】:

    $resource 服务具有isArray 配置,使其在获取数据之前返回一个空数组。你可以试试这个选项吗?我目前找不到任何文档。

    $http.get(url, {isArray : true }).success(someCallback);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      相关资源
      最近更新 更多