2017-05-11 81 views
0

我試圖在兩個控制器之間創建一個共享資源在angularjs中。 我已經在第二個控制器中使用getData()來獲取存儲的數據,並在第二個控制器中填充數據表。爲了簡單起見,我省略了代碼中的數據表部分。兩個控制器之間的共享功能angularjs

以下是兩個控制器

(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 

我的控制器文件以下是我的角應用程序文件

(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 
     }); 

    }]); 

    })(); 

這是我的服務。

(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 

我想在我的第一個控制器中設置數據,並從我的第二個控制器獲取相同的數據。

我的第二個控制器無法看到第一個控制器存儲的數據。

我想知道我是否缺少任何模塊注入?

回答

0

我會說你有你的代碼的一切是正確的,你只需要你的模態控制器綁定到一個視圖,它會被調用,然後你會看到你的服務的價值:

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

只是增加了一個變量的範圍,以打印視圖:

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

這裏有一個plunker自己嘗試一下。

+0

我想在第二個控制器中使用getData方法來獲取數據並填充第二個控制器中的數據表。我的問題是getData不顯示第一個控制器存儲的數據 –

+0

爲了簡單起見,我註釋了對第一個控制器中的服務的調用。我建議你檢查setData是否被實際調用,因爲如果有任何錯誤不會被調用。您可以在該塊外調用setData來測試它,或者捕獲該調用的錯誤。 – elvin

相關問題