2017-06-13 16 views
0

私は自分のコントローラから変数にアクセスしたいので、私は自分のサービスでそれを使うことができます!私は変数をグローバルにするとサービスにアクセスできると思っていましたが、heheはうまくいきません。変数はショップ btwです!私は、変数を作成していますのはここコントローラからサービスへの変数へのアクセス|角度1.5

は次のとおりです。ここで

$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

お使いのコントローラが実際にあなたのビューとシングルトンサービスの間だけ接着剤である...彼らは(再)作成し、アプリケーションのライフサイクルを通じてdetroyedある - サービスは、一度作成されます(シングルトン - と注入されたときに作成した後に再使用) 。

$scopeオブジェクト上のアプリケーション(コントローラ/サービス)全体で共有したい変数を保持する代わりに、アプローチを変えてください。シングルトンサービスecommercer内に作成する必要があります。

getter/setterの原則を使用すると、shopsという変数を、シングルトンサービスecommercer内で更新/取得できます。

アプローチをどのように変更する必要があるかを説明するために、以下の概略的な例を参照してください。

CONTROLLER & SERVICE

angular 
    .module('app', []) 
    .controller('MainController', MainController) 
    .service('ecommercer', ecommercer) 

function ecommercer() { 
    var shops; 

    return { 
    setShops: setShops, 
    getShops: getShops 
    } 

    function setShops(shops) { 
    this.shops = shops; 
    } 

    function getShops(shops) { 
    return this.shops; 
    } 

} 


function MainController(ecommercer) { 
    var vm = this; 
    this.setShops = setShops; 

    function setShops() { 
    ecommercer.setShops([{ 
     id: 1, 
     name: 'test shop 1' 
    }, { 
     id: 2, 
     name: 'test shop 2' 
    }]); 
    vm.shops = ecommercer.getShops(); 
    } 

} 

VIEW

<div ng-app="app" ng-controller="MainController as vm"> 
    <div ng-click="vm.setShops()"> 
    Set shops 
    </div> 
    <div> 
    {{vm.shops}} 
    </div> 
</div> 

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

関連する問題