有可能让一个控制器使用另一个控制器吗?

例如:

该HTML文档只是在messageCtrl.js文件中打印由MessageCtrl控制器传递的消息.

<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和访问服务.

推荐答案

控制器之间有多种通信方式.

最好的方法可能是共享一项服务:

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

在这两种情况下,您也可以与任何指令通信.

Javascript相关问答推荐

假设我有2个对象,根据它们,我想要新对象

Promise.all立即跳到那时,而不是调用所有Promise

nPM审计始终发现0个漏洞

调用SEARCH函数后,程序不会结束

react 路由加载程序行为

从mat—country—select获取整个Country数组

拖放仅通过 Select 上传

如何修复(或忽略)HTML模板中的TypeScript错误?'

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

为什么按钮会随浮动属性一起移动?

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

在浏览器中触发插入事件时检索编码值的能力

当用户点击保存按钮时,如何实现任务的更改?

TypeError:无法读取未定义的属性(正在读取';宽度';)

为什么可选参数的顺序会导致问题?

<;img>;标记无法呈现图像

我想将Sitecore搜索面过滤器从多个转换为单个

未捕获的运行时错误:调度程序为空

为什么在函数中添加粒子的速率大于删除粒子的速率?

对具有相似属性的对象数组进行分组,并使用串连的值获得结果