嵌套angularjs控制器:一个控制器如何与另一个控制器通信?

嵌套angularjs控制器:一个控制器如何与另一个控制器通信?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,以下是我的html视图: <div id="chatContainer"> <div id="users" ng-controller="usersController"> <div ng-repeat="user in users" class="userItem">{{user.username}}</div> </div> <div id="chatText" ng-controll

以下是我的html视图:

<div id="chatContainer">
    <div id="users" ng-controller="usersController">
        <div ng-repeat="user in users" class="userItem">{{user.username}}</div>
    </div>

    <div id="chatText" ng-controller="chatTextController">
        <div ng-repeat="text in texts" class="text">{{text.text}}</div>
    </div>

    <div id="chatInput" ng-controller="chatInputController">
        <input type="text" placeholder="Enter chat text here" id="chatInputTxt" ng-model="chatInputTxt">
    </div>
</div>
我的目标是编写chatInputController控制器,这样当用户在ChatInputXT中键入时,chatTextController中的文本将被更新,以不同的方式表示:

chatInputController如何访问/与ChatExtController通信


关于

您有几个选择:

您可以使用$broadcast和$on与同级控制器通信 如果您有一个父控制器,您可以将该控制器上的对象设置为与子控制器共享,只需确保您了解Angular$scope继承,否则事情很快就会变得混乱。- 使用共享服务从每个控制器进行访问
可以使用$emit或$broadcast生成事件并传递一些数据

$broadcast-将事件向下发送到所有子作用域

$emit-通过作用域层次结构向上发送事件

$scope.$broadcast'eventName',param1,param2

因此,您可以从$rootScope进行广播。然后在另一个控制器中使用

$scope.$on'eventName',functionparam1,param2{ }

去看比赛

您还可以使用服务,并在每个控制器的服务上设置一个手表。或者,您可以使用父控制器,而不是污染rootScope,并从父控制器进行广播

如果通信只是单向的,那么从子作用域到父作用域的emit将从子控制器工作

尽可能不要使用$emit或$broadcast,因为需要这些服务的服务越多,您就越可能陷入故障排除的混乱

Angular.js中的嵌套控制器自动接收其父作用域的副本。回答你的问题,这是自动的


你能详细解释一下2吗?当控制器2设置mySharedValue的值时,它会在该控制器上创建一个新的mySharedValue实例,我不确定它是如何工作的。。。你能分享文档中的参考资料吗?
<div ng-controller="controller1">
  {{mySharedValue}} // bar
  <div ng-controller="controller2">
    {{mySharedValue }} // also bar
  </div>
</div>
function controller1($scope) { $scope.mySharedValue = foo; $scope.notify = function() {
   console.log("I'm notified!") 
}; }
function controller2($scope) { $scope.mySharedValue = bar; $scope.notify(); // logs "i'm notified!" }