我有一个集合lines
我来自ajax调用,我使用ng-repeat
,对于每个项目line
,属性line.date
需要进行一些修改才能被调度
问题是我不知道如何调用函数进行修改?
我尝试data-ng-init
和ng-init
调用该函数,但变量为not updated
!
Html代码
<div ng-controller="lineController" data-ng-init="loadLines()">
<div ng-repeat="line in lines">
...
<div data-ng-init="loadDates(line.date)">
...
{{ leftDays}}
</div>
</div>
</div>
Js代码:
var app = angular.module("searchModule", []);
app.controller("lineController", function ($scope, $http)
{
// LOAD LINES AJAX
$scope.loadLines = function () {
$http({method: 'GET', url: '..'}).success(function(data) {
angular.forEach(data.content, function(item, i) {
$scope.lines.push(item);
});
});
};
$scope.loadDates = function (date) {
// complex updating of date variable
....
$scope.leftDays = ...;
};
});
答案 0 :(得分:1)
我认为你不需要这样做。你可以这样做;
$scope.loadLines = function () {
$http({method: 'GET', url: '..'}).success(function(data) {
angular.forEach(data.content, function(item, i) {
$scope.lines.push(item);
});
$scope.lines.map(function(line) {
// here is to modify your lines, with a custom
line.date = $scope.loadDates(line.date);
return line;
})
});
};
顺便说一句,我认为你可以用这个来修改你的ajax加载函数;
$scope.loadLines = function () {
$http({method: 'GET', url: '..'}).success(function(data) {
$scope.lines = data.content.map(function(line) {
// here is to modify your lines, with a custom
line.date = $scope.loadDates(line.date);
return line;
})
});
};
如果您不需要在视图中使用loadDates
函数,则无需将此函数设置为$scope
。您只需var
即可设置此功能。然后你可以使用那个功能; loadDates(...)
代替$scope.loadDates(...)
。
如果您不必更新$ scope.lines变量,则不需要使用.map。您可以按如下方式更新该功能;
$scope.loadLines = function () {
$http({method: 'GET', url: '..'}).success(function(data) {
$scope.lines = data.content;
angular.forEach($scope.lines, function(line) {
// here is to modify your lines, with a custom
$scope.loadDates(line.date);
})
});
};
答案 1 :(得分:1)
为什么不管理angular.forEach中的每个line
?
像这样:
$http({method: 'GET', url: '..'}).success(function(data) {
angular.forEach(data.content, function(item, i) {
//Do stuff to item here before pushing to $scope.lines
//item.date = new Date(item.date) blah blah
$scope.lines.push(item);
});
});
如果您想在html中以不同的方式显示line.date
,并且不想修改实际数据,为什么不为此使用$ filter?
像这样:
<span ng-repeat="line in lines">{{line.date|yourCustomFilter}}</span>