0

Ich versuche, eine gemeinsame Ressource zwischen zwei Controllern in angularjs zu erstellen. Ich habe die getData() im zweiten Controller verwendet, um die gespeicherten Daten zu erhalten und eine Datentabelle innerhalb des zweiten Controllers aufzufüllen. Ich habe den Datentabellenabschnitt im Code aus Gründen der Einfachheit weggelassen.Share-Funktion zwischen zwei Controllern angularjs

Nachstehend ist mein Controller-Datei mit zwei Controllern

(function(){ 
     var app = angular.module('adminCtrls',[]); 
     // Main Controller 
     app.controller('mainCtrl', function($scope, $http,testSrv){ 

     // Get the data form the phoenix database based on the query defined 
     // in db_size.php 
     $http.get('rest/admin/db_size.php').then(function(response){ 
     $scope.answers = response.data; 
     $scope.me = "$scope.answer"; 
      testSrv.setData($scope.me); 
     }); 
     }); 
     }) 

     // Modal Controller 
     app.controller('modalCtrl', function($scope,$http,testSrv){ 
     console.log(testSrv.getData()); 

     }); 

     }); 

    })(); // EOF 

Das Folgende ist meine Winkelanwendungsdatei

(function(){ 
    // Angular App 
    var app = angular.module('adminApp', ['ngRoute', 'adminCtrls', 'siteSrvs']); 
    // Routing 
    app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider){ 

     // HTML5 Mode 
     $locationProvider.html5Mode({ 
      enabled: true 
     }); 

    }]); 

    })(); 

Das ist mein Service.

(function(){ 

    // Phoenix Services 
    var phx = angular.module('siteSrvs',[]); 

    // Main 
    phx.service('testSrv', function($http){ 

    // Data Storage 
    var data = ''; 
    var answers = ''; 

    // Returned Functions 
    return { 
     getData : _getData, 
     setData : _setData, 
     getAnswers : _getAnswers 
    } 

    // Get Data 
    function _getData(){ 
     return data; 
    } 

    // Set Data 
    function _setData(t){ 
     if(t) data = t; 
    } 

    function _getAnswers(){ 
     return $http.get('/rest/test2/test2.php'); 
    } 

    }); 

    })(); // EOF 

Ich versuche Daten in meinem ersten Controller zu setzen und die gleichen Daten von meinem zweiten Controller zu erhalten.

Mein zweiter Controller kann die Daten, die vom ersten Controller gespeichert wurden, nicht sehen.

Ich möchte wissen, ob ich irgendeine Moduleinspritzung vermisse ??

Antwort

0

Ich würde sagen, dass Sie alles richtig in Ihrem Code haben, müssen Sie nur noch Ihren modal-Controller zu einer Ansicht binden, so dass es, aufgerufen wird, dann werden Sie den Wert in Ihrem Dienst sehen:

<body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p> 
    <div ng-controller="modalCtrl">{{data}}</div> 
</body> 

Just added eine Variable auf den Umfang es in der Ansicht zu drucken:

// Modal Controller 
app.controller('modalCtrl', function($scope, $http, testSrv) { 
    $scope.data = testSrv.getData(); 
    console.log('modalCtrl',$scope.data); 
}); 

hier ein plunker ist, es selbst auszuprobieren.

+0

Ich versuche, getData Methode im zweiten Controller zu verwenden, um die Daten zu erhalten und eine Datentabelle innerhalb des zweiten Controllers aufzufüllen. Mein Problem ist getData zeigt nicht die Daten an, die vom ersten Controller –

+0

gespeichert wurden Um es einfach zu halten, habe ich den Anruf zu dem Dienst auskommentiert, den Sie in der ersten Steuerung haben. Ich würde Ihnen empfehlen zu überprüfen, ob die setData tatsächlich aufgerufen wird, denn wenn es einen Fehler gibt, wird nie aufgerufen. Sie könnten setData außerhalb dieses Blocks aufrufen, um es zu testen oder den Fehler für diesen Aufruf zu ermitteln. – elvin

Verwandte Themen