将值范围传递给另一个

时间:2014-02-06 09:30:58

标签: jquery html5 angularjs

目前,我有一个控制器,可以通过搜索输入从数据库中获取数据(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"},..]

我想要做的是点击此列表中的一个元素填充另一个$ scope以使用(username,first_name,last_name)填充表。 此外,当清除搜索输入以搜索其他用户名时。该表保存数据,可以在表格中添加更多条目

更多信息

我的模板看起来像

 %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}}

1 个答案:

答案 0 :(得分: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;
}
对于Stef评论,

更新:。 如果要将加载的数据从一个控制器传递到另一个控制器,可以在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;
    });
 }