2016-03-31 6 views
0

Stellen Sie sich vor, ich habe eine Liste von Elementen, die im Handelscomputer ist. Dann hat der Benutzer auf einen der Artikel geklickt, er benutzt einen anderen Controller, wie bekomme ich die Artikel im Artikel-Controller?

.controller('store', function($scope,$http,$state) { 

    $http({ 
     method: 'GET', 
     url: $rootScope.hostname + '/api/products', 
     }).then(function successCallback(response) { 
     $scope.items = response.data.product; 

     }, function errorCallback(response) { 
     alert(response.data) 
     }); 

     $scope.GoItem = function(data){ 
     //data 
     $state.go('app.item'); 
     } 
}) 

.controller('item', function($scope,$http) { 
    //how to get the data here? 
}) 
+0

Sie können einen Dienst erstellen und sie beide injizieren, um gemeinsame Logik – philoniare

Antwort

1

Edit: Ich verwechselte die Frage. Da Sie versuchen, zwischen Controllern zu wechseln, haben Sie mehrere Möglichkeiten.

  1. Verwenden Sie $ rootScope. Dieser Bereich wird in Ihrer gesamten App geteilt.
  2. Verwenden Sie einen Service. Speichern Sie Ihren http-Anruf als Funktion.
1

Verwenden Sie $ stateParams, um dies zu tun.

app.controller('store', function($scope, $http, $state) { 
    $scope.items = [{ 
    'id': "1234", 
    'name': 'XYZ' 
    }, { 
     'id': "123456", 
     'name': 'ABC' 
    }] 

    $scope.GoItem = function(data) { 
    $state.go('app-item', { 
     'item': JSON.stringify(data) 
    }); 
} 
}) 

app.controller('item', function($scope, $http, $stateParams) { 
    console.log(JSON.parse($stateParams.item)) 
    $scope.item = JSON.parse($stateParams.item) 
    //how to get the data here? 
}) 

Erstellt arbeiten Plunker. Hoffe es löst dein Problem. https://plnkr.co/edit/tpl:8rFfZljYNl3z1A4LKSL2?p=preview

1

Sie können die Parameter als zweiten Parameter in $state.go('app.item', {'item':'my item'}); senden. Lösen Sie dann die Parameter in der Statuskonfiguration und übergeben Sie die aufgelösten Elemente an den Controller.

.controller('StoreCtrl', function($scope,$http,$state) { 
 

 
    $http({ 
 
     method: 'GET', 
 
     url: $rootScope.hostname + '/api/products', 
 
     }).then(function successCallback(response) { 
 
     $scope.items = response.data.product; 
 

 
     }, function errorCallback(response) { 
 
     alert(response.data) 
 
     }); 
 

 
     $scope.GoItem = function(data){ 
 
     //data 
 
     $state.go('app.item', {'itemData', myItem}); 
 
     } 
 
}) 
 

 
.controller('ItemCtrl', function($scope, $http, itemData) { 
 
    //how to get the data here? 
 
})

In Ihrem Zustand config:

$stateProvider 
 
.state('store', { 
 
    url:'/store', 
 
    templateUrl: 'store.html', 
 
    controller: 'StoreCtrl' 
 
}) 
 
.state('item', { 
 
    url:'/item', 
 
    templateUrl: 'item.html', 
 
    controller: 'ItemCtrl', 
 
    params: { 
 
    myItem: '' 
 
    }, 
 
    resolve: { 
 
    name: function($stateParams) { 
 
     return $stateParams.myItem; 
 
    } 
 
    } 
 
})

0

Wenn Sie diese Daten überall in Ihrer Anwendung weitergeben möchten. . Verwendung $ rootScope $

Sendung

Z. B:

.controller('StoreCtrl', function($scope,$http,$state,$rootScope) { 

    $http({ 
     method: 'GET', 
     url: $rootScope.hostname + '/api/products', 
     }).then(function successCallback(response) { 
     $scope.items = response.data.product; 

     }, function errorCallback(response) { 
     alert(response.data) 
     }); 

     $scope.GoItem = function(data){ 
     //data 
     $rootScope.$broadcast("passData", yourdata); 
     $state.go('app.item'); 
     } 
}) 

Auf dem zweiten Controller:

.controller('item', function($scope,$http) { 
     $scope.$on("passData", function(dataRecieved) { 
    console.log(dataRecieved); 
    }); 
}) 

Sie können auch $ stateParams verwenden. Dies ist eher wie Winkel 2 Ansatz (EventEmitter).

+0

für den Fall, wenn der erste Controller ist übergeordnete zum zweiten Controller Sie können auch $ scope. $ Broadcast ("passData", Daten) Wenn Sie Daten vom Child-Controller an die übergeordneten Daten senden möchten, verwenden Sie $ scope. $ emit ("passData", data). Beachten Sie, dass dies nicht genau jetzt erforderlich ist, aber dies sind die Möglichkeiten, die wir tun können, wenn wir die Beziehung zwischen den Bereichen kennen. – Venkat

Verwandte Themen