在Angular控制器中使用滤镜/对象的更好方法是什么?

时间:2014-02-21 14:17:46

标签: angularjs angularjs-scope

我正在设置一个rootScope变量来维护程序的状态。这有效,但我认为这不是'正确'。有没有更好的方法从数组中选择对象?

这是我目前的代码。

angular.module('myApp.controllers', [])
.controller('packingCtrl', ['$scope', '$http', '$filter', '$rootScope', function($scope, $http, $filter, $rootScope) {
    $http.get('data/trayData.json').success(function(data) {
        $scope.trays = data;
    });
    var currentOrder = $rootScope.currentlyPacking;;
    $http.get('data/orderData.json').success(function(data) {
        $scope.orders = data;
        $scope.current = $filter('filter')($scope.orders, {orderId: currentOrder});
    });
}])

提前感谢任何见解/最佳做法。

1 个答案:

答案 0 :(得分:0)

您可以创建一个服务来保存您的州。每个服务实例都是一个单例,因此当服务注入各种控制器时,所有服务器都会看到相同的状态。

var currentlyPackingSvc = function($http) {
    var currentlyPacking = {

    }

    return {
        currentlyPacking: currentlyPacking,
        getTrays: function() { /* make $http call and update currentlyPacking */ },
        getOrders: function() { /* make $http call and update currentlyPacking */  }
    }
}

angular.service('currentlyPackingSvc', ['$http', currentlyPackingSvc]);

angular.controller('packingCtrl', ['$scope', '$http', '$filter', '$rootScope', 'currentlyPackingSvc'
                     function($scope, $http, $filter, $rootScope, currentlyPackingSvc) {
    ...
    var currentOrder = currentlyPackingSvc.currentlyPacking;
    ...
}]);

假设您离开了当前正在包装的'作为对象的属性,更改应自动推送到您的范围。

这样,您可以将所有状态隔离到一个可以在任何地方使用的服务。