是否可以让一个控制器使用另一个控制器?
例如:
MessageCtrl此 HTML 文档仅打印文件中控制器传递的消息messageCtrl.js。
MessageCtrl
messageCtrl.js
<html xmlns:ng="http://angularjs.org/"> <head> <meta charset="utf-8" /> <title>Inter Controller Communication</title> </head> <body> <div ng:controller="MessageCtrl"> <p>{{message}}</p> </div> <!-- Angular Scripts --> <script src="http://code.angularjs.org/angular-0.9.19.js" ng:autobind></script> <script src="js/messageCtrl.js" type="text/javascript"></script> </body> </html>
控制器文件包含以下代码:
function MessageCtrl() { this.message = function() { return "The current date is: " + new Date().toString(); }; }
它只是打印当前日期;
如果我要添加另一个控制器,DateCtrl它将特定格式的日期返回给MessageCtrl,那么将如何执行此操作?DI 框架似乎关注XmlHttpRequests和访问服务。
DateCtrl
XmlHttpRequests
控制器之间有多种通信方式。
最好的可能是共享服务:
function FirstController(someDataService) { // use the data service, bind to template... // or call methods on someDataService to send a request to server } function SecondController(someDataService) { // has a reference to the same instance of the service // so if the service updates state for example, this controller knows about it }
另一种方法是在范围内发出事件:
function FirstController($scope) { $scope.$on('someEvent', function(event, args) {}); // another controller or even directive } function SecondController($scope) { $scope.$emit('someEvent', args); }
在这两种情况下,您也可以与任何指令进行通信。