Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs 如何将一些数据从一个控制器传递到另一个对等控制器_Angularjs - Fatal编程技术网

Angularjs 如何将一些数据从一个控制器传递到另一个对等控制器

Angularjs 如何将一些数据从一个控制器传递到另一个对等控制器,angularjs,Angularjs,我有以下两个对等控制器。这些没有父项: <div data-ng-controller="Controller1"> </div> <div data-ng-controller="Controller2"> The value of xxx is: {{ xxx }} </div> angular.module('test') .controller('QuestionsStatusController1', ['$ro

我有以下两个对等控制器。这些没有父项:

<div data-ng-controller="Controller1">

</div>

<div data-ng-controller="Controller2">
   The value of xxx is: {{ xxx }}
</div>

angular.module('test')
   .controller('QuestionsStatusController1',
    ['$rootScope', '$scope'
    function ($rootScope, $scope) {
    // How can I set the value of xxx in the HTML that's part of Controller2    
    }]);

angular.module('test')
   .controller('QuestionsStatusController2',
    ['$rootScope', '$scope',
    function ($rootScope, $scope) {
    }]);

xxx的值是:{{xxx}
角度模块(“测试”)
.controller('问题StatusController 1',
['$rootScope','$scope'
函数($rootScope,$scope){
//如何在作为Controller2一部分的HTML中设置xxx的值
}]);
角度模块(“测试”)
.controller('QuestionsStatusController2',
['$rootScope','$scope',
函数($rootScope,$scope){
}]);

在控制器1中,我想更新由控制器2控制的HTML中变量xxx的值。有什么方法可以做到这一点吗?

使用服务来实现这一点:

MyApp.app.service("xxxSvc", function () {

var _xxx = {};

return {
    getXxx: function () {
        return _xxx;
    },
    setXxx: function (value) {
        _xxx = value;
    }
};

});
接下来,将此服务注入两个控制器

在Controller1中,您需要通过调用服务来设置共享xxx值:
xxxSvc.setXxx(xxx)

最后,在Controller2中,在此服务的getXxx()函数上添加一个$watch,如下所示:

  $scope.$watch(function () { return xxxSvc.getXxx(); }, function (newValue, oldValue) {
        if (newValue != null) {
            //update Controller2's xxx value
            $scope.xxx= newValue;
        }
    }, true);

在一个控制器中,您可以执行以下操作:

$rootScope.$broadcast('eventName', data);
并用另一种方式聆听事件:

$scope.$on('eventName', function (event, data) {...});
你需要使用

 $rootScope.$broadcast()
在必须发送数据的控制器中。在接收这些数据的那一个中,您使用

 $scope.$on
这是我几天前用叉子叉的小提琴(我不知道是谁先叉的)


一定要使用服务在控制器之间共享数据,下面是一个工作示例。 $broadcast不是最佳选择,如果有更合适的方法,则应避免使用事件系统。请使用“服务”、“值”或“常量”(用于全局常量)

下面是一个输入示例,您可以在页面上看到数据镜像:


你不需要使用
$broadcast
$emit
,或者
$on
我实际上更喜欢服务,因为这些方法会在代码中到处散播意大利面信息-基本上,服务会将这些信息与相关的“事件”包含在一个地方。我认为这是abov的视频教程e posted fiddle.Works在Angular 1.4!+1中可以作为工厂使用吗?但这不是对服务进行两个单独的调用吗?我的意思是,如果服务是http请求,它不会为相同的数据创建两个单独的http请求吗?我无法发送“yyy”或者我需要从QuestionsStatusController 1读取硬编码数据,然后传递到QuestionsStatusController 2。如何将图像从一个控制器发送到另一个控制器?您应该使用Factory进行数据共享,而不是服务。当您使用Factory时,您创建一个对象,向其添加属性,然后返回同一个对象。但如果服务它是用“new”关键字ie new Object实例化的。这是我正在搜索的,谢谢这解决了我的问题,非常感谢!
var testModule = angular.module('testmodule', []);

testModule
   .controller('QuestionsStatusController1',
    ['$rootScope', '$scope', 'myservice',
    function ($rootScope, $scope, myservice) {
       $scope.myservice = myservice;   
    }]);

testModule
   .controller('QuestionsStatusController2',
    ['$rootScope', '$scope', 'myservice',
    function ($rootScope, $scope, myservice) {
      $scope.myservice = myservice;
    }]);

testModule
    .service('myservice', function() {
      this.xxx = "yyy";
    });