我已经尝试了很多办法,服务,$ rootScope,广播控制器...angularjs得到NG-重复目的是在不同的页面
我只是想获取对象的一个实例用户选择的ng-repeat,并将其属性动态地列入新的html页面。
有人可以告诉我这种情况下的最佳解决方案吗?到目前为止我尝试过的所有东西都出错了。
我有两个控制器一个用于页面1,另一个用于页面2和一个包含我的列表的服务。
app.service('selectedPost', function() {
var list = { ... };
var post;
return {
getPost: function() {
return post;
},
setPost: function(p) {
post = p;
}
});
app.controller('page2Ctrl', function($scope, selectedPost, $rootScope) {
//tried:
$scope.obj = selectedPost.getPost();
//tried
$scope.obj = {p : selectedPost.getPost() };
//tried:
$scope.obj = $rootScope.pobj;
});
app.controller('pageCtrl', function($scope, selectedPost, $rootScope) {
//I call this method in my page1 html and pass the ng-repeat object as parameter:
//tried:
$scope.selectPost = function(post) {
selectedPost.setPost(post);
};
//tried:
$scope.selectPost = function(post) {
$rootScope.pobj = post;
};
$scope.postList = selectedPost.getPostList();
$scope.totalItems = $scope.postList.length;
$scope.itemsPerPage = 6;
$scope.currentPage = 1;
$scope.maxSize = 5;
$scope.setPage = function (pageNo) {
$scope.currentPage = pageNo;
};
$scope.pageChanged = function() {
console.log('Page changed to: ' + $scope.currentPage);
};
$scope.pageCount = function() {
return Math.ceil($scope.postList.length/$scope.itemsPerPage);
};
$scope.filter = function(items, groupedBy) {
if (items) {
var finalItems = [],
thisGroup;
for (var i = 0; i < items.length; i++) {
if (!thisGroup) {
thisGroup = [];
}
thisGroup.push(items[i]);
if (((i+1) % groupedBy) === 0) {
finalItems.push(thisGroup);
thisGroup = null;
}
}
if (thisGroup) {
finalItems.push(thisGroup);
}
return finalItems;
}
};
$scope.$watch('currentPage + itemsPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredItems = $scope.postList.slice(begin, end);
$scope.listFilter = $scope.filter($scope.filteredItems, 2);
});
});
page1.html
<div ng-controller="pageCtrl">
<div class="row" ng-repeat="itemList in listFilter">
<div class="col-md-6" ng-repeat="post in itemList">
....
<input class="button" type="submit" value="More" ng-click="selectPost(post)"/>
....//redirect to page2.html
</div>
</div>
</div>
page2.html文件:
<div ng-controller="page2Ctrl">{{obj.something}}</div>
谢谢!
这似乎应该是工作。你有没有尝试验证selectPrpp是否被调用?有什么理由? getPost返回什么? – gkalpak 2014-10-01 17:33:35
selectPost被调用,但getPost()返回undefined,所以这段代码是正确的? – 2014-10-01 17:39:07
你想从哪里获得'listFilter'?它没有在控制器中定义,也没有被服务返回(因此不可用)。 – Rorschach120 2014-10-01 17:40:13