数据不会通过服务传递给其他控制器

如何解决数据不会通过服务传递给其他控制器

我正在尝试将我的数据从控制器1传递到控制器2,但是当我将数据记录到控制器2中时,它返回的值为undefined。之所以使用jquery来请求数据,是因为我使用的是数据表,而且我不知道如何使用angularjs和datatables框架进行事件绑定。我想知道根据控制器1向其发送数据的方式,我对工厂服务的实现是否正确,因为我认为这就是我现在的问题所在。数据没有通过工厂服务。

工厂服务

app.factory('profilingFactory',function() {
    var factoryData = {};
    var factoryModel = {};
    
    factoryData.setModel = function(key,value) {
        factoryModel[key] = value;
    }
    
    factoryData.getModel = function(key) {
        return factoryModel[key];
    };
    
    return factoryData;
    
});

控制器1

app.controller('profilingController',function($scope,$http,$window,profilingFactory) {
    
    $(document).ready(function() {
        
        
        $scope.table = $('#table_profile').DataTable ({
            "ajax": {
                "url": "/getProfilesData",},"columns": [
                {"data": "applicant_id"},{"data": "application_type"},{"data": "last_name"},{"data": "middle_name"},{"data": "first_name"},{"data": "birth_date"},{"data": "address"},{"data": "sex"},{"data": "date_applied"},{
                    "data": "applicant_id","mRender":  function (data,type,full) {
                        var editLink = '<button id="editFunc" class="btn btn-primary" type="button" data-id="' + data + '">Edit</button>';
                        //var editLink = '<a id="editFunc" class="editFunction" href="/editProfiles?applicant_id=' + data + '">Edit</a>';
                        var deleteLink = '<button class="btn btn-primary" id="deleteButtonFunc" type="button" data-id="'+ data +'">Delete</button>';
                        return (editLink + " " + "  |  " + " " + deleteLink);
                    }
                }
            ]
        });

        $('body').on('click','#editFunc',function(e) {
            
            var clickedEdit = $(this);
            var id = clickedEdit.attr("data-id");
            var url = "/editProfiles?applicant_id=" + id;
            var editData = {
                    editId: id
            }
            //$(location).attr('href',url);
            $http.get('/getEditProfilesData/',{params: editData}).then(function(response) {
                //this is orignally what I inteded. I only put a string to test if the service is working
                profilingFactory.setModel('proFactor',response.data);
            });
            
        });
        
        
        $scope.stringXample = "Yeh";
        //$scope.editProfiles = appData;
        
        $('body').on('click','#deleteButtonFunc',function(e){
        
            var clicked = $(this);
            var id = clicked.attr("data-id");
            
            var deleteData = {
                    deleteId: id
            }
            
            $http.get('/delProfileData/',{params: deleteData}).then(function(response) {
                clicked.parents("tr").remove();
                alert("User info successfully removed");
            });
            //Optional delete Row after 
        });
        
    });
    

控制器2

app.controller('editProfliesController',profilingFactory) {
    $scope.value = profilingFactory.getModel('proFactor');
    console.log($scope.value);
});

HTML

<div class="row">
                    <h1 class="header-edit">Basic Information</h1>
                    <div class="col-md-3">
                        <div class="form-group">
                            <label for="pwd">Last Name:</label> <input type="text"
                                class="form-control" name="pwd" value="{{appData.last_name}}">
                        </div>
                    </div>

                    <div class="col-md-3">
                        <div class="form-group">
                            <label for="email">First Name:</label> <input type="text"
                                class="form-control" name="email" value="{{appData.first_name}}">
                        </div>
                    </div>

                    <div class="col-md-3">
                        <div class="form-group">
                            <label for="pwd">Middle Name:</label> <input type="text"
                                class="form-control" name="pwd">
                        </div>
                    </div>

                    <div class="col-md-3">
                        <div class="form-group">
                            <label for="pwd">Birth:</label> <input type="date"
                                class="form-control" name="pwd" >
                        </div>
                    </div>
                </div>

解决方法

我在本地尝试了您的代码。我先了解一下这个问题。

Controller1和Controller2已在初始页面渲染中加载。加载后,Controller2的“功能”将不再执行。 在Controller1中完成$ http.get之后,实际上实际上需要再次使其一部分启动。 您可以使用 $ watch https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch)来实现。

setModel 保留在$ http.get中,并将Controller2逻辑更改为下面,然后重试:

app.controller('editProfliesController',function ($scope,$http,$window,profilingFactory) {
                $scope.$watch(function () { return profilingFactory.getModel('proFactor') },function (newVal,oldVal) {
                    if (newVal!==oldVal)
                    console.log(newVal);
                });
            });

完整代码(最小的可复制示例)

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script>
    var app = angular.module('myApp',[]);
    app.factory('profilingFactory',function () {
        var factoryData = {};
        var factoryModel = {};

        factoryData.setModel = function (key,value) {
            factoryModel[key] = value;
        }

        factoryData.getModel = function (key) {
            return factoryModel[key];
        };
        return factoryData;
    });

    app.controller('profilingController',profilingFactory) {

        $(document).ready(function () {
            $('body').on('click','#editFunc',function (e) {
                                
                //$(location).attr('href',url);
                $http.get('/getEditProfilesData/',{ params: "" }).then(function (response) {
                    // I will not land here since call will fail for me. I am setting model in fail function below
                    // profilingFactory.setModel('proFactor',"hello world");
                },function (response) {
                        profilingFactory.setModel('proFactor',"hello world");
                });

            });
            $scope.stringXample = "Yeh";
            //$scope.editProfiles = appData;
            $('body').on('click','#deleteButtonFunc',function (e) {

                var clicked = $(this);
                var id = clicked.attr("data-id");

                var deleteData = {
                    deleteId: id
                }

                $http.get('/delProfileData/',{ params: deleteData }).then(function (response) {
                    clicked.parents("tr").remove();
                    alert("User info successfully removed");
                });
                //Optional delete Row after 
            });
        });
            });
            app.controller('editProfliesController',oldVal) {
                    if (newVal!==oldVal)
                        console.log(newVal);
                });
            });
    </script>
<body>

    <div ng-app="myApp">
        <input type="button" id="editFunc" value="Edit"/>
        <div ng-controller="profilingController"></div>
        <div ng-controller="editProfliesController"></div>
    </div>

</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res