如何将对象数组从一个控制器传递到另一个控制器

时间:2015-01-01 17:57:19

标签: jquery angularjs controller

我是angularJS的新手,我有一个问题

我有

<div class="item-hover circle effect1" data-ng-repeat="order in Bands">
    <a ng-click="getPerson(order)">
        <div class="spinner"></div>
        <div class="img">
            <img src="http://onthedoor.blob.core.windows.net/photos/{{ order.PosterPicId }}/fullheight.png" alt="img">
        </div>
        <div class="info">
            <div class="info-back">
                <h3>{{ order.BusinessName }}</h3>
                <p>{{ order.Genre1 }}</p>
                <p>Click to know more about this band</p>
            </div>
        </div>
    </a>
</div>

这里我有一个庞大的数据,以便用户点击ng-click="getPerson(order)" 时我想要的是什么 我想将该订单传递给另一个页面,该页面将显示有关该乐队EG的更多详细信息。曲目,演出等。

这是我的乐队控制器的样子

'use strict';
app.controller('bandsController', ['$scope', 'bandsService', function ($scope, bandsService) {

    $scope.orders = [];

    bandsService.getBands().then(function (results) {

        $scope.Bands = results.data;
        console.log(results.data)
        $scope.getRandomSpan = function () {
            return Math.round( Math.random() * (19 - 1) + 1);;
        }

    }, function (error) {
        //alert(error.data.message);
    });
    $scope.getPerson = function (band) {
        $scope.$broadcast("band", band);
    };

}]);


function DetailCtrl($scope, $location) {
    $scope.$on("band", function (event, person) {
        $scope.person = person;
    });
}

我不知道如何做到这一点我已经阅读了一些帖子,但它只显示有关传递变量的信息,但我想将该特定对象传递给另一个控制器,所以我不必再次请求服务器,可以降低速度。

所以,我需要的是当用户点击我希望将该对象传递给另一个页面的控制器并绑定该信息时我不知道如何重定向并获取该对象。

感谢。

更新

app.factory('myService', ['$http', 'ngAuthSettings', function ($http, ngAuthSettings) {
    var savedData = {}
    function set(data) {
        savedData = data;
    }
    function get() {
        return savedData;
    }

    return {
        set: set,
        get: get
    }

}]);

我将数据传递到 myservice 这里

app.controller('bandsController', ['$scope', 'bandsService', function ($scope, bandsService) {

    $scope.orders = [];

    bandsService.getBands().then(function (results) {

        $scope.Bands = results.data;
        console.log(results.data)
        $scope.getRandomSpan = function () {
            return Math.round( Math.random() * (19 - 1) + 1);;
        }
        myService.set(results.data)
        $scope.doComplete = function () {
            $('.clickBands').click(function () {
                alert('');
            })
        }
        $scope.message="jhi";
        $scope.clickFunction = function () {
            $scope.$broadcast('update_parent_controller', $scope.message);
        };

        //myService.set(yourSharedData);




    }, function (error) {
        //alert(error.data.message);
    });

}]);

目前它的抛出异常如myservice未定义我不知道我做错了什么。 我想要的是重定向 banddetails 控制器,并在此我的服务中有数据

2 个答案:

答案 0 :(得分:1)

一种可能性是拥有一个服务来存储这个对象的实例:

app.service('myService', function() {
    this.myData = [];

    this.setMyData = function(myData) {
        this.myData = myData;
    };

    this.getMyData = function() {
        return this.myData;
    };
});

现在只需在两个控制器中注入服务。在第一个控制器中,在重定向到第二个控制器之前分配值,在第二个控制器中读取服务中的值。将服务视为应用程序的单例存储,您可以将某些状态保留在内存中。

答案 1 :(得分:1)

如果您只想要一个简单的回应:

1)你可以注入$ rootScope模块并存储你的变量,你也可以使用你体内的MainController。

2)只需使用发送数据的$ emit,并使用$ on来检索数据。

但是,如果你需要将数组从一个控制器传递到另一个控制器,试着想出如何更好地构建你的代码,$ emit不是很明显,因为它在源上使用了$ watch(非常重的模块)。

我只是不喜欢使用服务来存储简单的数据,因为更好的架构服务必须只抽象API调用(甚至模拟objs)