Javascript 调用函数或将数据传递给另一个控制器AngularJS
我似乎已经有了其他关于这类问题的话题,但没有人能帮我。。。这就是我的问题: 我有一个带有搜索按钮的导航栏,这个按钮从Web服务发出和获取请求,并返回一个json对象,该对象必须应用于填充表列表。问题是,我的按钮和我的表在不同的控制器中,它确实像我预期的那样工作Javascript 调用函数或将数据传递给另一个控制器AngularJS,javascript,angularjs,Javascript,Angularjs,我似乎已经有了其他关于这类问题的话题,但没有人能帮我。。。这就是我的问题: 我有一个带有搜索按钮的导航栏,这个按钮从Web服务发出和获取请求,并返回一个json对象,该对象必须应用于填充表列表。问题是,我的按钮和我的表在不同的控制器中,它确实像我预期的那样工作 var app = angular.module('clientRest', []).controller('lista', ['$scope', 'loadLista', function($scope, loadLista) {
var app = angular.module('clientRest', []).controller('lista', ['$scope', 'loadLista', function($scope, loadLista) {
$scope.contatos = loadLista.getContatos();
}]).controller('pesquisa', ['$scope', '$http', 'loadLista', function($scope, $http, loadLista) {
$scope.listar = function() {
$http.get("http://localhost/wsRest/index.php/contato").success(function(response) {
loadLista.setContatos(response);
});
};
}]).service('loadLista', function() {
var contatos = [];
return {
getContatos: function() {
return contatos;
},
setContatos: function(c) {
contatos = c;
}
};
});
我的代码。。。
当我从pesquisa controller调用listar()
时,我需要将接收到的数据从lista controller发送到$scope.contatos,以使ng重复工作,只需单击一下即可完成所有操作
我怎么做
谢谢大家使用$rootScope.$emit在设置变量时发出更改事件,并使用$on在lista控制器中获取值。我在这里使用customListAr只是为了演示一个按钮点击。这有用吗
var-app=angular.module('clientRest',[])
.controller('lista'、['$scope'、'loadLista'、'$rootScope',
函数($scope,loadLista,$rootScope){
console.log(loadLista);
$scope.contatos=loadLista.getContatos();
$rootScope.$on('change',function()){
$scope.contatos=loadLista.getContatos();
});
}
])
.controller('pesquisa'、['$scope'、'$http'、'loadLista',
函数($scope、$http、loadLista){
$scope.listar=函数(){
$http.get(“http://localhost/wsRest/index.php/contato)成功(功能(响应){
loadLista.setContatos(响应);
});
};
$scope.customListAr=函数(){
loadLista.setContatos([“第1项”、“第2项”、“第3项]);
}
}
])
.service('loadLista',['$rootScope',
函数($rootScope){
var contatos=[];
返回{
getContatos:function(){
返回contatos;
},
setContatos:函数(c){
contatos=c;
$rootScope.$emit('change');
}
};
}
]);代码>
- {{a}
点击我
最好使用服务在两个控制器/模块之间共享数据,因为这可能是最好的方法。您可以参考下面给出的代码段来理解这个概念。
angular.module('app.A', [])
.service('ServiceA', function() {
this.getValue = function() {
return this.myValue;
};
this.setValue = function(newValue) {
this.myValue = newValue;
}
});
angular.module('app.B', ['app.A'])
.service('ServiceB', function(ServiceA) {
this.getValue = function() {
return ServiceA.getValue();
};
this.setValue = function() {
ServiceA.setValue('New value');
}
});
为了触发数据接收事件,您可以使用
广播/发射消息-使用@Broadcast
/@emit
带回电的有棱角的承诺
控制器启动功能,用于重新加载以前从服务读取的信息
.controller('MyController',函数($scope,ServiceA){
$scope.init=函数(){
$scope.myValue=ServiceA.getValue();
};
//在控制器实例化期间调用函数进行初始化
$scope.init();
});代码>
您的问题是,当您执行$scope.contatos=loadLista.getContatos()时;您正在设置一个静态值,angular无法有效地为该对象创建观察者,因为您的setContatos方法每次都在创建一个新对象。为了避免这种情况,让控制器的作用域保留对父对象的引用,然后它将自动在该对象上有一个观察者
var app = angular.module('clientRest', [])
.controller('lista', ['$scope', 'loadLista', function($scope, loadLista) {
$scope.contatos = loadLista.contatos;
}])
.controller('pesquisa', ['$scope', '$http', 'loadLista', function($scope, $http, loadLista) {
$scope.listar = function() {
$http.get("http://localhost/wsRest/index.php/contato"
).success(function (response) {
loadLista.contatos.data = response;
});
};
}])
.service('loadLista', function() {
var lista = {
contatos: {},
};
return lista;
});
// view:
<ul>
<li ng-repeat="contato in contatos.data">
{{ contato }}
</li>
</ul>
var-app=angular.module('clientRest',[])
.controller('lista',['$scope','loadLista',function($scope,loadLista){
$scope.contatos=loadLista.contatos;
}])
.controller('pesquisa',['$scope','$http','loadLista',function($scope,$http,loadLista){
$scope.listar=函数(){
$http.get(“http://localhost/wsRest/index.php/contato"
).成功(功能(响应){
loadLista.contatos.data=响应;
});
};
}])
.service('loadLista',function(){
var lista={
续:{},
};
返回列表a;
});
//视图:
-
{{contato}}