0

我对 angular/js 比较陌生。我正在使用 ng-repeat 重复来自网络服务的结果(作为列表项)。我必须使用 json 结果中的一些字段来创建一个动态 URL,以便在我的网页上为每个 ng-repeat 项目使用。除了我的自定义 URL 之外,一切都很好地重复。

旁注,我也在做分页 - 每页有 5 个列表项。这工作正常。

控制器片段:

$scope.stores = response.data;
$scope.jsonSize = $scope.stores.length;

for (var i = 0; i<=$scope.jsonSize - 1; i++) {
    $scope.storeSize = $scope.stores[i].SIZE;
    $scope.empCount = $scope.stores[i].EMPLOYEE_COUNT;
    $scope.customUrl = 'http://test.com/' + $scope.storeSize  + ',' + $scope.empCount;
    console.log("custom url is " + $scope.customUrl);
}

网络服务/json 片段:

[{"STORE_ID":"001","SIZE":1000,"EMPLOYEE_COUNT":45},
 {"STORE_ID":"002","SIZE":500,"EMPLOYEE_COUNT":25},
 {"STORE_ID":"003","SIZE":750,"EMPLOYEE_COUNT":40}]

翡翠片段:

li(ng-repeat="store in stores | startFrom:currentPage*pageSize | limitTo:pageSize" )
    .store-link
        a(ng-href="{{customUrl}}" target="_blank") Employees  

我的 console.log 为每个结果返回正确的 URL。该网页创建了员工链接,但是,每个结果项的 href 值最终都是http://test.com/750,40 - 从最后一个结果。

我试过 ng-click 并将 URL 放入一个函数中。我也尝试过 href 和 ng-href ,但没有任何运气。我没有正确绑定它还是我的循环把事情搞砸了?

任何帮助将非常感激!

4

2 回答 2

0

您应该修改存储以包含所有逻辑以便于查看。您显然可以使用$index来查看不同的数组,但就我而言,这不是一个真正合乎逻辑的方法。

$scope.stores = response.data.map(function(storeData) {
  return {
    storeSize: storeData.SIZE,
    empCount: storeData.EMPLOYEE_COUNT,
    url: 'http://test.com/' + storeData.SIZE + ',' + storeData.EMPLOYEE_COUNT;
  };
});
li(ng-repeat="store in stores | startFrom:currentPage*pageSize | limitTo:pageSize" )
.store-link
    a(ng-href="{{ store.url }}" target="_blank") Employees  

理想情况下,您在服务中检索数据并将所有原始数据转换为模型,然后简单地使用这些模型来填充您的视图。

于 2016-11-04T15:13:12.130 回答
0

可能是因为您的循环被每个循环for覆盖。$scope.customUrl使其成为一个集合,附加到它,然后使用它:

$scope.customUrls = [];
for (var i = 0; i<=$scope.jsonSize - 1; i++) {
    $scope.storeSize = $scope.stores[i].SIZE;
    $scope.empCount = $scope.stores[i].EMPLOYEE_COUNT;
    var url = 'http://test.com/' + $scope.storeSize  + ',' + $scope.empCount;
    $scope.customUrls.push(url);
    console.log("custom url is " + $scope.customUrls[i]);
}

和观点:

li(ng-repeat="store in stores | startFrom:currentPage*pageSize | limitTo:pageSize" )
.store-link
    a(ng-href="{{customUrls[$index]}}" target="_blank") Employees  

更好的办法是使用 URL 将属性添加到您的 stores 集合中:

for (var i = 0; i<=$scope.jsonSize - 1; i++) {
    $scope.storeSize = $scope.stores[i].SIZE;
    $scope.empCount = $scope.stores[i].EMPLOYEE_COUNT;
    var url = 'http://test.com/' + $scope.storeSize  + ',' + $scope.empCount;
    $scope.stores[i].url = url;
    console.log("custom url is " + $scope.stores[i].url);
}

li(ng-repeat="store in stores | startFrom:currentPage*pageSize | limitTo:pageSize" )
.store-link
    a(ng-href="{{store.url}}" target="_blank") Employees  
于 2016-11-04T15:04:56.967 回答