这是我的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控制器,这样当用户输入chatInputTxt时,chatTextController中的文本会更新,说的不同:
chatInputController如何访问/与chatTextController进行通信?
此致
答案 0 :(得分:0)
您不应该尽可能使用$emit
或$broadcast
,因为需要这些服务的服务越多,您可以进行更多的故障排除。
Angular.js中的嵌套控制器会自动收到父母范围的副本。要回答您的问题,全部是自动的。
<div ng-controller="controller1">
{{mySharedValue}} // bar
<div ng-controller="controller2">
{{mySharedValue }} // also bar
</div>
</div>
... JS
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!" }
答案 1 :(得分:-1)
您有几个选择:
$broadcast
和$on
与兄弟控制器进行通信答案 2 :(得分:-1)
您可以使用$ emit或$ broadcast来生成事件并传递一些数据。
$ broadcast - 将事件向下发送到所有子范围。
$ emit - 通过范围层次结构向上发送事件。
$ scope。$ broadcast(&#39; eventName&#39;,param1,param2);
所以你可以从$ rootScope广播。然后在另一个控制器中使用
$ scope。$ on(&#39; eventName&#39;,function(param1,param2){ })
赶上活动。
您还可以在每个控制器中使用服务并在服务上设置监视。或者您可以拥有父控制器,而不是污染rootScope并从父控制器进行广播。
如果通信只是一种方式,从子范围到父范围,那么emit将从子控制器工作。