2014-02-06 166 views
0

現在,我有一個控制器,它允許從數據庫中獲取數據(json),並帶有搜索輸入。將值範圍傳遞給另一個

var app = angular.module('myApp',[]); 

app.controller('MailCtrl',function($scope,itemFactory){ 
    $scope.init = function(){ 
     $scope.items = {}; 
     var search = $('#input').val(); 
     mailFactory.getItems(search).success(function(data){ 
      $scope.items = data; 
     }); 
    } 
    $('#input').keyup(function(){ 
     $scope.init() 
    }); 


}); 

app.factory('itemFactory', function($http){ 
    var factory = {}; 
    factory.getItems = function(search) { 
     return $http.get("/admin/get_saved_items/?search="+search); 
    } 
return factory; 
)}; 

此控制器允許用戶名(顯示)填充列表。但是從數據庫中的數據看起來像

[{"username" : "username1","first_name":"first_name1","last_name":"last_name1"}, 
{"username" : "username2","first_name":"first_name2","last_name":"last_name2"},..] 

我想這樣做的是點擊該列表中的一個元素來填充的其他$範圍來填充(用戶名,名字,姓氏)的表。 此外,當搜索輸入被清除以搜索其他用戶名。該表保存數據,並有可能增加在桌子上

更多信息

我的模板看起來更多的條目像

%div{:ng=>{:controller=>'MailCtrl'}} 
     %div.col-lg-6 
      %input.form-control#unsername{:name =>'unsername',:type=>'text', :value=>parameters['unsername'],:autocomplete => "off"} 

     %div.col-lg-6 
      %ul{:ng=>{:repeat=>"item in items"}} 
       %li 
        {{ item.username }} 

%div.form-group{:ng=>{:controller=>'userCtlr'}} 
     %table.table.table-bordered#table_user 
      %tr 
       %th 
        Username 
       %th 
        first name 
       %th 
        last name 
      %tr{:ng=>{:repeat=>"user in users"}} 
       %td 
        {{user.username}} 
       %td 
        {{user.first_name}} 
       %td 
        {{user.las_name}} 
+0

多個控制器之間的通訊,使用服務http://docs.angularjs.org/guide/dev_guide.services.creating_services – doodeec

回答

1

使用共享服務,並將它注入到任何控制器:

angular.module("yourAppName", []).factory("mySharedService", function(){ 

     var mySharedService = {}; 

     mySharedService.values = {}; 

     mySharedService.setValues = function(params){ 
      mySharedService.values = params; 
     } 

     return mySharedService; 
    }); 

並將其注入控制器後。例如:

function MainCtrl($scope, mySharedService) { 
    var obj = $scope.someObj; 
    mySharedService.setValues(obj); 
} 

function AdditionalCtrl($scope, mySharedService) { 
    $scope.var2= myService.values; 
} 

更新:的燕姿發表評論。 如果您想要將加載的數據從一個控制器傳遞到另一個控制器,您可以在ng-click()中調用傳遞函數,並從sharedService中廣播所需的事件。

查看:

<input ng-model="someModel" ng-click="passData(items)"> 

FirstController:

function FirstCtrl($scope, mySharedService) { 
     $scope.passData(params){ 
     mySharedService.setValues(params); 
     } 
} 

SharedService:

angular.module("yourAppName", []).factory("mySharedService", function($rootScope){ 

     var mySharedService = {}; 

     mySharedService.values = {}; 

     mySharedService.setValues = function(params){ 
      mySharedService.values = params; 
      $rootScope.$broadcast('dataPassed'); 
     } 

     return mySharedService; 
    }); 

SecondController:

function SecondController($scope, mySharedService) { 
    $scope.$on('dataPassed', function() { 
     $scope.newItems = mySharedService.values; 
    }); 
} 
+0

我開始與angularjs。我怎樣才能通過點擊一個列表元素來調用? (ng點擊??) – Stephane

+0

@Stefrob我更新我的答案爲您指定的問題:) –

相關問題