Angular将被点击的对象复制到另一个控制器

Angular Copy clicked object to another controller

本文关键字:复制 另一个 控制器 对象 Angular      更新时间:2023-09-26

我有一个项目列表,如果我单击其中一个,当前对象应该复制到另一个控制器并显示在那里,我已经创建了工厂来保存单击的项目,但没有显示在第二个控制器视图中,我不明白为什么不显示。

这是plnker https://plnkr.co/edit/hWjFJCJcq3vtvefzFMOy

和代码。

    <!DOCTYPE html>
<html>
<head>
    <title>Angucomplete</title>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
    <body ng-app="myApp">
        <div class="container">
            <div class="container" ng-controller="ControllerOne">
                <h3>Controller One</h3>
                <table class="table">
                    <thead>
                        <th>Rol Id</th>
                        <th>Rol Name</th>
                        <th>Rol Activo </th>
                        <th>Acciones </th>
                    </thead>
                    <tbody>
                        <tr ng-repeat="rol in roles">
                            <td>{{rol.rolId}}</td>
                            <td>{{rol.rolName}}</td>
                            <td>{{rol.rolActivo}}</td>
                            <td><a href="#" ng-click="propiedades(rol)"> <span class="fa fa-search"></span>  </a>   </td>
                        </tr>
                    </tbody>
                </table>
                <pre>{{ rol }}</pre>
            </div>
            <div class="container" ng-controller="ControllerTwo">
                <h3>Controller Two</h3>
                RolId: {{ rol.rolId  }} <br>
                RolName: {{ rol.rolName }} <br>
                RolActvio: {{ rol.rolActivo }} <br>

            </div>
        </div>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
        <script>
            var app = angular.module('myApp',[]);
            app.factory('Data', function(){
                return{
                    currentRol:{},  
                    setCurrentRol: function(rol){
                        this.currentRol = rol;
                        console.log( 'Desde service set: ' + JSON.stringify( this.currentRol ) );
                    }
                }
            });
            app.controller('ControllerOne', function($scope, Data){
                $scope.propiedades = function(rol){
                  $scope.rol = rol;
                    Data.setCurrentRol(rol);                                    
                }
                $scope.roles =[
                    {rolId: 1, rolName:"Administrador", rolActivo:"26/10/2016"},
                    {rolId: 2, rolName:"DBA", rolActivo:"25/08/2016"},
                    {rolId: 3, rolName:"Tester", rolActivo:"01/01/2016"},
                    {rolId: 4, rolName:"Ingeniero de Desarrollo", rolActivo:"12/11/2015"},
                    {rolId: 5, rolName:"Ingeniero de Pruebas", rolActivo:"06/03/2016"},
                    {rolId: 6, rolName:"Secretario", rolActivo:"06/03/2016"},
                    {rolId: 7, rolName:"VICE", rolActivo:"06/03/2016"},
                    {rolId: 8, rolName:"Arquitecto", rolActivo:"06/03/2016"},
                ];
            })// Fin controller one 
            app.controller('ControllerTwo', function($scope, Data){
                $scope.rol = Data.currentRol;
            })// Fin controller two
        </script>
    </body>
</html>

您可以按照下面的方法做broadcast

 <!DOCTYPE html>
<html>
<head>
    <title>Angucomplete</title>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
    <body ng-app="myApp">
        <div class="container">
            <div class="container" ng-controller="ControllerOne">
                <h3>Controller One</h3>
                <table class="table">
                    <thead>
                        <th>Rol Id</th>
                        <th>Rol Name</th>
                        <th>Rol Activo </th>
                        <th>Acciones </th>
                    </thead>
                    <tbody>
                        <tr ng-repeat="rol in roles">
                            <td>{{rol.rolId}}</td>
                            <td>{{rol.rolName}}</td>
                            <td>{{rol.rolActivo}}</td>
                            <td><a href="#" ng-click="propiedades(rol)"> <span class="fa fa-search"></span>  </a>   </td>
                        </tr>
                    </tbody>
                </table>
                <pre>{{ rol }}</pre>
            </div>
            <div class="container" ng-controller="ControllerTwo">
                <h3>Controller Two</h3>
                RolId: {{ rol.rolId  }} <br>
                RolName: {{ rol.rolName }} <br>
                RolActvio: {{ rol.rolActivo }} <br>
            </div>
        </div>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
        <script>
            var app = angular.module('myApp',[]);
            app.factory('Data', function(){
                return{
                    currentRol:{},  
                    setCurrentRol: function(rol){
                        this.currentRol = rol;
                        console.log( 'Desde service set: ' + JSON.stringify( this.currentRol ) );
                    }
                }
            });
            app.controller('ControllerOne', function($scope, $rootScope, Data){
                $scope.propiedades = function(rol){
                  $scope.rol = Data.currentRol = rol;
                  Data.setCurrentRol(rol);                     
                  $rootScope.$broadcast('dataChanged');
                }
                $scope.roles =[
                    {rolId: 1, rolName:"Administrador", rolActivo:"26/10/2016"},
                    {rolId: 2, rolName:"DBA", rolActivo:"25/08/2016"},
                    {rolId: 3, rolName:"Tester", rolActivo:"01/01/2016"},
                    {rolId: 4, rolName:"Ingeniero de Desarrollo", rolActivo:"12/11/2015"},
                    {rolId: 5, rolName:"Ingeniero de Pruebas", rolActivo:"06/03/2016"},
                    {rolId: 6, rolName:"Secretario", rolActivo:"06/03/2016"},
                    {rolId: 7, rolName:"VICE", rolActivo:"06/03/2016"},
                    {rolId: 8, rolName:"Arquitecto", rolActivo:"06/03/2016"},
                ];
            })// Fin controller one 
            app.controller('ControllerTwo', function($scope, Data){
                $scope.rol = Data.currentRol;
                $scope.$on('dataChanged', function() {
                  $scope.rol = Data.currentRol;
                });
            })// Fin controller two
        </script>
    </body>
</html>

您的服务中有一个setter函数,但是您还需要一个getter函数来检索新控制器中的数据。在服务中设置数据时,将其存储在一个变量中。然后从getter返回那个变量。然后你可以在你的新控制器中设置一个作用域变量,它会调用getter函数,现在你就可以在新控制器中拥有数据了。

相关文章: