Javascript angularjs从ng repeat获取一个对象,并将其发送到另一个页面中的控制器

Javascript angularjs从ng repeat获取一个对象,并将其发送到另一个页面中的控制器,javascript,angularjs,Javascript,Angularjs,我尝试了很多方法,服务,$rootScope,广播 我只想在用户选择的ng repeat中获得对象的一个实例,并将其属性动态地列出到一个新的html页面中 有人能告诉我这个案子的最佳解决方案吗?到目前为止,我所尝试的一切都出了问题 我有两个控制器,一个用于第1页,另一个用于第2页,还有一个包含我的列表的服务 app.service('selectedPost', function() { var list = { ... }; var post; return {

我尝试了很多方法,服务,$rootScope,广播

我只想在用户选择的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);
          });
    });
app.service('selectedPost',function(){
变量列表={…};
var post;
返回{
getPost:function(){
回程站;
},
setPost:功能(p){
post=p;
}
});
app.controller('page2Ctrl',函数($scope,selectedPost,$rootScope){
//尝试:
$scope.obj=selectedPost.getPost();
//尝试
$scope.obj={p:selectedPost.getPost()};
//尝试:
$scope.obj=$rootScope.pobj;
});
app.controller('pageCtrl',函数($scope,selectedPost,$rootScope){
//我在page1 html中调用此方法,并将ng repeat对象作为参数传递:
//尝试:
$scope.selectPost=函数(post){
selectedPost.setPost(post);
};
//尝试:
$scope.selectPost=函数(post){
$rootScope.pobj=post;
};
$scope.postList=selectedPost.getPostList();
$scope.totalItems=$scope.postList.length;
$scope.itemsPerPage=6;
$scope.currentPage=1;
$scope.maxSize=5;
$scope.setPage=函数(页码){
$scope.currentPage=pageNo;
};
$scope.pageChanged=函数(){
log('页面更改为:'+$scope.currentPage);
};
$scope.pageCount=函数(){
返回Math.ceil($scope.postList.length/$scope.itemsPerPage);
};
$scope.filter=函数(项目,分组依据){
若有(项目){
var finalItems=[],
本组;
对于(变量i=0;i
页面1.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
page2.html文件:

<div ng-controller="page2Ctrl">{{obj.something}}</div>
{{obj.something}

谢谢!

您正在加载一个完全不同的页面(全页重新加载)并实例化一个全新的Angular应用程序。
您不能通过应用传递状态并使用服务重新加载,因为每次应用/重新加载都会重新实例化服务

我怀疑您正在尝试在SPA中实现路由(而不是传统的完整页面加载)。 在这种情况下,您应该使用路由模块,如
ngRoute
ui.router

例如:


...
...
有棱角的
模块('myApp',['ngRoute'])。
配置(函数($routeProvider){
$routeProvider。
当(“/path1”{
templateUrl:“…”,
控制器:“…”
}).
当('/path2',{…})时。
...
}).
服务('selectedPost',…)。
控制器(“…”,…)。
...


另请参见,此

似乎应该可以工作。您是否尝试验证是否调用了selectPrpp?使用了什么参数?getPost返回了什么?selectPost被调用,但getPost()未被调用return undefined,那么这个代码是对的?您试图从哪里获取
listFilter
?它没有在控制器中定义,也没有被服务返回(因此不可用)@罗夏120edited@VitorFreitas当前位置核心逻辑似乎有问题。一定是其他原因打破了它。在我的3个问题中,您仍然没有回答1个。请随意编辑小提琴并复制您的问题。
<body ng-app="myApp">
    ...
    <ng-view></ng-view>
    ...
    <script src="lib/angular/angular.js"></script>
    <script src="lib/angular/angular-route.js"></script>
</body>

angular.
    module('myApp', ['ngRoute']).
    config(function ($routeProvider) {
        $routeProvider.
        when('/path1', {
            templateUrl: '...',
            controller:  '...'
        }).
        when('/path2', {...}).
        ...
    }).
    service('selectedPost', ...).
    controller('...', ...).
    ...