Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用函数或将数据传递给另一个控制器AngularJS_Javascript_Angularjs - Fatal编程技术网

Javascript 调用函数或将数据传递给另一个控制器AngularJS

Javascript 调用函数或将数据传递给另一个控制器AngularJS,javascript,angularjs,Javascript,Angularjs,我似乎已经有了其他关于这类问题的话题,但没有人能帮我。。。这就是我的问题: 我有一个带有搜索按钮的导航栏,这个按钮从Web服务发出和获取请求,并返回一个json对象,该对象必须应用于填充表列表。问题是,我的按钮和我的表在不同的控制器中,它确实像我预期的那样工作 var app = angular.module('clientRest', []).controller('lista', ['$scope', 'loadLista', function($scope, loadLista) {

我似乎已经有了其他关于这类问题的话题,但没有人能帮我。。。这就是我的问题:

我有一个带有搜索按钮的导航栏,这个按钮从Web服务发出和获取请求,并返回一个json对象,该对象必须应用于填充表列表。问题是,我的按钮和我的表在不同的控制器中,它确实像我预期的那样工作

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