如何使$ controller的范围成为另一个控制器范围

时间:2016-08-29 13:08:13

标签: angularjs

我有两个模块的应用程序 1-项目 2-文件

每个项目都有很多文档,当我在项目表中选择一个项目时,我想显示其文档

我为service.js和controller.js制作了每个模块 在文件controller.js中有一个函数可以获取合适的文档信息表格数据库并将其填入文件表

我正在使用此功能将数据传送到我的表

var documentCtrl = this;
documentCtrl.callServer = function callServer(projectId) {

        return documentsService.getDocuments(projectId).then(function(result){
                 documentCtrl.displayed = result.documents;
        });
    }
项目表中的

我想在选择任何项目时获取其文档并将其显示在文档表

var projectCtrl = this;
projectCtrl.toggleSelection = function indexof(row){

  var documentController = $controller('documentsListController',{
      $scope : 'what I have to use here??' 
  });

  documentController.callServer(row.projectId);
}

当我从projectCtrl调用此函数时,对象documentCtrl.displayed已填充,但表保持空白

所以我不想在控制器之间进行通信,而我需要的就是打电话

callServer(projectId) {

        return documentsService.getDocuments(projectId).then(function(result){
                 documentCtrl.displayed = result.documents;
        });

并使用合适的值填充documentCtrl.displayed并将其显示在此表中

<div id="documentsList" ng-controller="documentsListController as doc" >
<tr ng-repeat="row in doc.displayed">
        <td>{{row.documentId}}</td>
        <td>{{row.documentName}}</td>
        <td>{{row.documentExtension}}</td>
</tr>
</div>

1 个答案:

答案 0 :(得分:1)

控制器之间有几种可能的通信方式。

  • 服务
  • 事件
  • 观察者

最简单的 - 服务。您已调用documentsService可以将返回的数据保存到该服务中的变量。并且它将在所有将注入该服务的控制器中使用。

var documentCtrl = this;
documentCtrl.callServer = function callServer(projectId) {

    return documentsService.getDocuments(projectId).then(function(result){
             documentCtrl.displayed = result.documents;
             documentsService.documents = result.documets;
    });
}

只需将服务注入第二个控制器,一旦它将在第一个控制器中调用,结果也将在第二个控制器中提供。