2017-08-20 3 views
0

Ich muss ein Objekt von einem Controller zu einem anderen übergeben und this Lösung verwendet haben, aber es funktioniert nicht.Übergeben von Objekt von einem Controller zu einem anderen AngularJS

Hier ist der Code:

angular.module("customerApp", []) 
.controller('MainCtrl', function ($scope, myService, $http, $location) { 
    var vm = this; 
    vm.pinFormCheck = function() { 
     vm.count++; 
     if (vm.pinForm.$valid && vm.details.PIN === vm.pin && vm.count <= 2) { 
      location.href = "http://localhost:51701/Home/MainMenu"; 
      $scope.obj = { 
       'cid': 'vm.details.CID', 
       'name': 'vm.details.Name', 
       'pin': 'vm.details.PIN', 
       'bal': 'vm.details.Bal', 
       'status': 'vm.details.cardStatus' 

      }; 
      console.log(vm.details.Bal);//the correct balance get displayed in console 
     } else { 
      vm.failPin = true; 
     } 
    }; 
}) 

.controller('CheckCtrl', function ($scope, myService) { 
    $scope.data = myService.getObj(); 
}) 

.factory('myService', function() { 
    var obj = null; 
    return { 
     getObj: function() { 
      return obj; 
     }, 
     setObj: function (value) { 
      obj = value; 
     } 
    } 
}); 

Hier ist der Ansicht, aus der das erste Objekt übergeben wird:

<body ng-app="customerApp"> 
    <div ng-controller="MainCtrl as vm"> 
     <form name="vm.pinForm"> 
      <input type="password" ng-model="vm.pin" ng-required="true" /> 
      <p><button ng-disabled="vm.count >=3" ng-click="vm.pinFormCheck();" ng-init="vm.count=0">Proceed</button></p> 
        </form> 
        ... 

Hier die zweite Ansicht, wo ich das Objekt

<html ng-app="customerApp"> 
    <body ng-controller="CheckCtrl"> 
     <div> 
      <h1>your balance is {{data.bal}}</h1> 
      .... 

Die Waage von vm.details.Bal aus der ersten Ansicht muss in data.bal i erscheinen in der zweiten Ansicht, aber nichts erscheint.

+1

Die Servicedaten bleiben zwischen den Seitenladungen nicht erhalten. Erwägen Sie die Verwendung von [localStorage] (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) oder die Erstellung eines [SPA] (https://en.wikipedia.org/wiki/Single -page_application) mit einem Router wie [ngRoute] (https://stackoverflow.com/tags/groute/info) oder [UI Router] (https://stackoverflow.com/tags/angular-u-router/info) . – georgeawg

Antwort

0

Sie können vm.details in einigen Fabrik speichern. Und dann erhalten Sie es in CheckCtrl von dieser Fabrik. Fabriken in AngularJS implementieren Singleton-Muster. So gespeicherte Daten werden gespeichert, bis Ihre App existiert.

Sie haben versucht, als nächstes myService.getObj(); zu tun, aber Sie haben nichts zu dem Dienst gespeichert.

Inject myService an die MainCtrl und dann speichern Sie Details in es.

Verwandte Themen