当前位置: 首页 > 面试题库 >

将一个控制器链接到另一个控制器以通过ng-click调用服务

危砚
2023-03-14
问题内容

我有两个模板,分别带有控制器和服务文件。一个模板的(fleetListTemplate)控制器(fleetListController)从其服务文件(fleetService)加载数据并显示在其视图(fleetListTemplate)中。

当发生这种情况时,我单击从FleetService加载的数据之一,则应该将FleetListController链接到FleetSummaryController以从其服务文件(fleetSummaryService)中获取数据,并显示在FleetSummaryTemplate视图中。

有人可以帮我编码吗?谢谢。

以下是各个模块,模板,控制器和服务文件。

舰队清单模块

"use strict";

angular.module("fleetListModule", []);

FleetListTemplate

<div class="panel1 panel-primary">
    <div class="panel-heading" align="center">TRUCKS</div>
    <table class="table table-bordered table-condensed table-striped">

        <tr>
            <th>TruckID</th>
            <th>Status</th>
            <th>Dest.</th>
            <th>Alerts</th>
        </tr>
        <tr ng-repeat="truck in trucks" ng-click="summaryData()">
            <td>{{truck.truckID}}</td>
            <td>{{truck.status}}</td>
            <td>{{truck.destination}}</td>
            <td>{{truck.alerts}}</td>
        </tr>

    </table>
</div>

FleetListController

"use strict";

angular.module("fleetListModule").controller("fleetListController",
    ['$scope', 'fleetsService', 
        function ($scope, fleetsService) {

            $scope.trucks = fleetsService.getTrucks();


            $scope.summaryData = function () {
                $rootScope.$broadcast('obtainSummary');
            }

        }]);

舰队摘要模块

"use strict";

angular.module("fleetSummaryModule", []);

舰队摘要模板

<div class="panel2 panel-primary">
    <div class="panel-heading">Summary</div>
    <table class="table table-bordered table-condensed table-striped">

        <tr ng-repeat="summary in truckSummary">
            <td>Truck ID: {{summary.truckID}}</td>
            <td>Trailer ID: {{summary.trailerID}}</td>
            <td>Driver ID: {{summary.driverID}}</td>
            <td>Truck Number: {{summary.truckNumber}}</td>
            <td>Trailer Number: {{summary.trailerNumber}}</td>
            <td>Insurance Due Date: {{summary.insuranceDueDate}}</td>
            <td>Maintenance Due Date: {{summary.maintenanceDueDate}}</td>
        </tr>

    </table>
</div>

舰队摘要控制器

"use strict";

angular.module("fleetSummaryModule").controller("fleetSummaryController",
    ['$scope', 'fleetSummaryService',
        function ($scope, fleetSummaryService) {
        $scope.$on('obtainSummary', function (event, args) {

            $scope.truckSummary = fleetSummaryService.getSummary();
        })

        }]);

舰队摘要服务

"use strict";

angular.module("fleetSummaryModule").service("fleetSummaryService",

       function () {
           this.getSummary = function () {
               return summary;
           };
           this.getSummary = function (truckID) {
               for (var i = 0, len = truckSummary.length; i < len; i++) {
                   if (truckSummary[i].truckID === parseInt(truckID)) {
                       return truckSummary[i];
                   }
               }
               return {};
           };
           var truckSummary = [
               {
                   truckID: 1,
                   trailerID: '123',
                   driverID: 'Alex123',
                   truckNumber: 'hyt 583',
                   trailerNumber: 'xyz213',
                   insuranceDueDate: '25-12-2015',
                   maintenanceDueDate: '31-12-2015'

               },
                   {
                       truckID: 2,
                       trailerID: '456',
                       driverID: 'Alex123',
                       truckNumber: 'hyt 583',
                       trailerNumber: 'xyz213',
                       insuranceDueDate: '25-12-2015',
                       maintenanceDueDate: '31-12-2015'

                   },
                   {
                       truckID: 3,
                       trailerID: '789',
                       driverID: 'Alex123',
                       truckNumber: 'hyt 583',
                       trailerNumber: 'xyz213',
                       insuranceDueDate: '25-12-2015',
                       maintenanceDueDate: '31-12-2015'
                    }
           ];

       });

问题答案:

这个简单的示例向您展示了如何使用通用服务“在一个应用程序中”在两个控制器之间共享数据。

angular.module("app", []);



        ///controller1

        angular.module("app").controller("controller1", function ($scope, service) {

            $scope.lists = [

                { name: "maher" },

                { name: "Gaurav Ram" },

                { name: "Shaun Scovil" }

            ];



            $scope.send = function () {

                service.set("lists", $scope.lists); //set(key, value)

                $scope.lists = []; //optional

            }



        });



        ///controller2

        angular.module("app").controller("controller2", function ($scope, service) {

            $scope.lists = [];



            //get data from broadcast on the root

            service.get("lists"); // get(key)



            //set data

            $scope.resive = function () {

                if (angular.isUndefined($scope.broadcast)) {

                    $scope.alert = "No data to resive!";

                } else {

                    $scope.alert = null;

                    $scope.lists = $scope.broadcast;

                }

            }

        });



        ///service

        angular.module("app").service("service", function ($rootScope) {

            this.set = function (key, value) {

                $rootScope.$broadcast(key, value);

            }



            this.get = function (key) {

                $rootScope.$on(key, function (event, data) {

                    $rootScope.broadcast = data;

                });

            }

        });


<!doctype html>

<html ng-app="app">

<head>

    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />

</head>

<body>



    <div ng-controller="controller1" class="col-md-6 col-sm-6 col-xs-6">

        <div class="page-header">

            <h1>controller 1</h1>

        </div>



        <button ng-click="send()" class="btn btn-primary">Send</button>

        <div class="clearfix"></div>

        <br/>

        <div class="alert alert-info" ng-if="lists.length == 0">Data <b>sent</b> to controller 2, click Resive button to get data</div>

        <ul class="list-group">

            <li ng-repeat="list in lists" class="list-group-item" ng-bind="list.name"></li>

        </ul>

    </div>



    <div ng-controller="controller2" class="col-md-6 col-sm-6 col-xs-6">

        <div class="page-header">

            <h1>controller 2</h1>

        </div>



        <button ng-click="resive()" class="btn btn-success">Resive</button>

        <div class="clearfix"></div>

        <br />

        <div class="alert alert-info" ng-bind="alert" ng-if="alert"></div>

        <ul class="list-group">

            <li ng-repeat="list in lists" class="list-group-item" ng-bind="list.name"></li>

        </ul>



    </div>



    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js"></script>

</body>

</html>


 类似资料:
  • 问题内容: 一个控制器可以使用另一个控制器吗? 例如: 该HTML文档仅在文件中打印由控制器传递的消息。 控制器文件包含以下代码: 它只是打印当前日期; 如果我要添加另一个控制器,它将特定格式的日期返回给,那么该怎么做呢?DI框架似乎与服务有关。 问题答案: 控制器之间有多种通信方式。 最好的一种可能是共享服务: 另一种方法是在范围内发出事件: 在这两种情况下,您都可以与任何指令进行通信。

  • 问题内容: 一个控制器可以使用另一个控制器吗? 例如: 该HTML文档仅在文件中打印由控制器传递的消息。 控制器文件包含以下代码: 它只是打印当前日期; 如果我要添加另一个控制器,它将特定格式的日期返回给,那么该怎么做呢?DI框架似乎与服务有关。 问题答案: 控制器之间有多种通信方式。 最好的一种可能是共享服务: 另一种方法是在范围内发出事件: 在这两种情况下,您都可以与任何指令进行通信。

  • 我是JavaFx新手,因此我找不到解决问题的方法 假设我有以下应用程序结构: 在SecondController中显示文本的最佳/最佳方式是什么,从FirstController传递文本。我的意思是,我在中输入一个文本,然后按下按钮,按下按钮后,我希望文本显示在使用另一个控制器的中。我已经阅读了很多关于和可以用来解决这个问题的知识,但不幸的是,我无法实现一个有效的解决方案。 如果你们专家能在这方面

  • 问题内容: 我是Angular的新手,正在尝试弄清楚该怎么做… 使用AngularJS,如何注入要在另一个控制器中使用的控制器? 我有以下片段: 执行此操作时,出现错误: 我是否应该尝试在另一个控制器内部使用一个控制器,还是应该将此服务用作服务? 问题答案: 如果您打算掌握已经实例化的另一个组件的控制器,并且如果您遵循的是基于组件/指令的方法,则始终可以遵循某个层次结构的另一个组件中的控制器(一个

  • 问题内容: 我有以下两个对等控制器。这些没有父项: 在控制器1中,我想更新由Controller2控制的HTML中的变量xxx的值。有办法吗? 问题答案: 绝对使用服务在控制器之间共享数据,这是一个有效的示例。$ broadcast不是要走的路,您应该避免在有更合适的方式时使用事件系统。使用“服务”,“值”或“常量”(用于全局常量)。 http://plnkr.co/edit/ETWU7d0O8K

  • 需要你的帮助!这可能是更多的设计角度,但我在我的应用程序中使用这个模式,所以想得到一个想法。 我的问题是直接或间接地从一个控制器访问另一个控制器。是否有任何优雅的设计方法来做到这一点,而不是在另一个控制器中保留一个控制器的引用。 提前致谢