【问题标题】:Initializing an array at return of an ajax request在返回 ajax 请求时初始化数组
【发布时间】:2014-12-02 21:07:32
【问题描述】:

尝试学习角度我遇到了以下情况。

我的应用程序使用 ASP.NET Web Api 从复杂而缓慢的数据库中返回产品对象。由于速度慢,我想分页从服务器返回的对象。我创建了一个包含产品数组、当前页面和产品最后一页的视图模型。

为了显示一个分页小部件,我想用一组页码填充我的 $scope 对象,以便与 ng-repeat 指令一起使用。

我尝试使用函数填充数组:

(in pseudo)
$scope.pages = function(){
      var pageNumberArray = [];
      pagecounter = 1;     
      while (pagecounter <= maxPage){
          pageNumberArray.push(pageCounter);
          pageCounter++;
      }
};

在我看来,使用此功能的 ng-repeat:

<ul>
    <li ng-repeat="pageNr in pages()">{{pageNr}}</li>
</ul>

它似乎可以显示,但我的开发人员工具控制台显示的错误似乎是合法的:[$rootScope:infdig] 10 $digest() 达到了迭代。中止!

如何在不从视图调用 $scope 函数的情况下初始化 $scope 数组(字段)。

附言当 ajax 请求返回一个新页面时,该数组应该重新初始化(并非所有页码都显示(当前页面下方为 5,当前页面上方为 5)。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我认为使用 ng-repeat 的函数会干扰双向绑定。

    我会说 $scope.pages 应该是你范围内的一个变量。如果您稍后更新此变量,您的视图将通过双向绑定自动更新。

    所以是这样的:

    在控制器中:

    $scope.pages = []
    for (var i; i < maxPage; i += 1) {
        $scope.pages.push(i);
    }
    $http.get(...).success(data){
        // update $scope.pages
    }
    

    在视图中:

    <div ng-repeat="page in pages">{{page}}</div>
    

    【讨论】:

    • 您好,感谢您的快速回复。当然 $scope.pages 应该是一个变量。在 [] 之后,我希望有一个分号(用于在 C# 中加点)。那么for循环从何而来。我可以无中生有地调用某种逻辑吗? (抱歉,我是一个对 javascript 知之甚少的 C# 开发人员)。
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多