Angular Copy将对象单击到另一个控制器

时间:2016-11-05 23:40:05

标签: javascript angularjs angular-controller angular-factory

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

这是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>

2 个答案:

答案 0 :(得分:0)

您可以执行以下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>

答案 1 :(得分:0)

您的服务中有一个setter函数,但您还需要一个getter函数来检索新控制器中的数据。在服务中设置数据时,将其存储在变量中。然后从你的getter返回那个变量。然后,您可以在新控制器中设置范围变量,该变量调用getter函数,现在您将在新控制器中获得数据。