从控制器访问变量到服务| Angular 1.5

时间:2017-06-13 13:56:59

标签: javascript angularjs scope angular-services

我想从我的控制器访问一个变量,所以我可以在我的服务中使用它!我认为,如果我将变量设为全局变量,我可以在我的服务中访问它,但它并不能解决问题。变量是商店 btw!

这是我创建变量的地方:

    $scope.$on('$ionicView.enter', function (e) {
    ecommercer.getData().then(function (s) {
        $scope.shops = s.vendors
        $scope.categories = s.categories

        $ionicScrollDelegate.resize()

        if ($stateParams.id && $stateParams.id.length > 1) {
            $ionicTabsDelegate.showBar(false)
            ecommercer.saveShopById($stateParams.id)
            $state.go('tab.ecommerce.shop')
        }
    })
})

这里(同一个文件)是我使用变量的地方:

    $scope.$watch('selectedCategory.name', function (newval, oldval) {

        if ($scope.selectedCategory.name != undefined) {
            $scope.shops = ecommercer.filterByCategory(newval.id)

        } else {
            $scope.shops = ecommercer.filterByCategory(null)
        }

    })

这是我在服务文件中创建相同变量的地方:

app.service('ecommercer', function (eapi, $q, storage, $http, endpointHandler, $state, $rootScope, $filter) {
var products, categories, vendors, shops

最后,我正在尝试在我的服务中使用它:

function filterByCategory(categoryid, shops) {
    if (!categoryid) return shops
    console.log(shops);

    var newlist = []
    for (var s in shops) {
        if (shops[s].category.split(',').length > 0) {
            for (var c in shops[s].category.split(',')) {
                if (shops[s].category.split(',')[c] == categoryid) {
                    newlist.push(shops[s])
                }
            }
        }
    } 
    return newlist
}

1 个答案:

答案 0 :(得分:1)

您的控制器实际上只是视图和单例服务之间的粘合剂......它们在整个应用程序生命周期中(重新)创建和销毁 - 服务创建一次(单例 - 并在注入后创建后重用)。

因此,你应该改变你的方法,而不是在你的控制器中保存你想要共享你的应用程序(控制器/服务)的变量 - 在pred <- predict (fit ,test ,type = "class")对象上 - 你应该在你的单件服务中创建它{ {1}}。

通过getter / setter原则,您可以更新/检索单件服务$scope中的变量ecommercer

请参阅以下粗略示例,说明您应如何更改方法。

CONTROLLER&amp; SERVICE

shops

查看

ecommercer

https://jsfiddle.net/DaanDeSmedt/j5uqaxgy/