Mam dwa kontrolery, jeden kontroler jest dla formularza, który jest wywoływany po kliknięciu przycisku formularza, a jeden sterownik jest dla div, który jest interpolowany za pomocą zakresu i {{}}. Problem polega na tym, że muszę przekazać dane zebrane po złożeniu formularza do innego sterownika. Jak mogę nazwać funkcję drugiego kontrolera w pierwszej funkcji kontrolera:

//FIRST CONTROLLER, CALLED BY CLICKING BUTTON
app.controller('FormController', function ($scope) {
    $scope.IdSubmitted = function () {
        $scope.datatokens = json_datatokens;
        //WHERE I NEED TO CALL THE SECOND CONTROLLER, AND PASS IT "json_datatokens"
    }
});

//SECOND CONTROLLER
app.controller('#10Controller', function ($scope) { 

    $scope.datatokens = json_datatokens;    
});

HTML:

#FORM
<div ng-controller="FormController">
    <form class="search-wrapper" onsubmit='load_button();fetch_data();return false;'>
        <input type="text">
        <button type="submit" class="button " ng-click="IdSubmitted()">Submit Info</button>
    </form>

#DIV
        <div ng-controller='#10Controller' ng-init="init()">
            <p>Your payment is {{datatokens["DB.PMT"]}}</p>
        </div>
0
maudulus 12 sierpień 2014, 23:12

2 odpowiedzi

Najlepsza odpowiedź

Oprócz opcji sugerowanych przez Sjhonny, można użyć nadawania z czymś w rodzaju następującego.

app.controller('FormController', function ($scope) {
    $scope.IdSubmitted = function () {
        $scope.$emit('formSubmission', json_datatokens);
    }
});

app.controller('#10Controller', function ($scope) { 
    $scope.$on('formSubmission', function(event, data) {
        $scope.datatokens = data;
    });  
});
1
Andrew Sula 12 sierpień 2014, 19:33

Istnieje kilka opcji

  1. Użyj obiektu udostępnionego (wolę fabrykę; możesz wybrać usługę), który również odwołują się oba kontrolery. Masz pierwszy kontroler ustawić dane w tym wspólnym obiekcie, a druga może ją przeczytać.
    na przykład-

    app.factory('sharedStuffFactory', function() {
      return {
         sharedData: null; //that will be filled be one of the controllers
      }
    });
    

app.controller('FormController', function ($scope, sharedStuffFactory) { $scope.IdSubmitted = function () { $scope.datatokens = json_datatokens; sharedStuffFactory.sharedData = json_datatokens; } }); app.controller('#10Controller', function ($scope, sharedStuffFactory) { $scope.datatokens = sharedStuffFactory.sharedData;
});

  1. Jeśli zmienisz strukturę HTML trochę, aby umieścić drugi div w pierwszej pierwszej, można po prostu podzielić się między nimi zakres.
1
J. Ed 12 sierpień 2014, 19:24