Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从控制器到服务的访问变量|角度1.5_Javascript_Angularjs_Scope_Angular Services - Fatal编程技术网

Javascript 从控制器到服务的访问变量|角度1.5

Javascript 从控制器到服务的访问变量|角度1.5,javascript,angularjs,scope,angular-services,Javascript,Angularjs,Scope,Angular Services,我想从我的控制器访问一个变量,以便在我的服务中使用它!我想,如果我把变量设为全局变量,我可以在我的服务中访问它,但它不起作用,呵呵。顺便说一句,变量是shops 下面是我创建变量的地方: $scope.$on('$ionicView.enter', function (e) { ecommercer.getData().then(function (s) { $scope.shops = s.vendors $scope.categories =

我想从我的控制器访问一个变量,以便在我的服务中使用它!我想,如果我把变量设为全局变量,我可以在我的服务中访问它,但它不起作用,呵呵。顺便说一句,变量是shops

下面是我创建变量的地方:

    $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)
        }

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

    $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
}

您的控制器实际上只是视图和单例服务之间的粘合剂。。。它们会在应用程序的整个生命周期中重新创建和删除—服务只创建一次—并在注入时在创建后重新使用

因此,您应该改变您的方法,而不是在控制器内的$scopeobject上保存您希望在应用程序控制器/服务之间共享的变量,您应该在singleton服务电子商务中创建它

通过getter/setter原则,您可以更新/检索singleton服务电子商务中的变量商店

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

控制器和服务

看法