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