You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用$ctrl而非$scope时,AngularJS中SQL查询结果无法显示的问题

AngularJS中SQL查询结果无法显示的问题排查与修复

嘿,我帮你揪出问题所在了,核心是控制器上下文绑定错误加上变量赋值对象搞错了,咱们一步步拆解:

问题1:错误地给构造函数而非实例赋值

你在$q.all的回调里用了cryostatController.TT0101,这里的cryostatController是你的控制器构造函数,你给它添加的是静态属性,而模板里的{{ $ctrl.TT0101Value }}对应的是当前控制器实例的属性,所以模板根本访问不到这个值,自然显示为空;用this.TT0101时因为回调里this指向不对,所以抛出undefined。

问题2:Promise回调中的this指向丢失

在$http或者$q.all的回调函数里,this的上下文已经不再是控制器实例了,直接用this赋值会导致变量绑定到错误的对象上。

问题3:重复的HTTP请求(非致命但冗余)

你发起了两次完全相同的$http.get("cryostat/cryostat.conn.php")请求,完全没必要,一次请求就能拿到数据。


修正后的组件代码

'use strict';
angular.module('cryostat', []).component('cryostat', {
  templateUrl: 'cryostat/cryostat.template.html',
  controller: function cryostatController($scope, $http, $q) {
    // 提前保存控制器实例的引用,避免回调中this指向丢失
    var vm = this;
    vm.pageTitle = "NP04 Cryostat";
    vm.natalie = 1;

    // 只发起一次HTTP请求
    var tempRequest = $http.get("cryostat/cryostat.conn.php");
    
    $q.all([tempRequest]).then(function (resultArray) {
      // 用vm(控制器实例)来赋值,而不是构造函数
      vm.TT0101 = resultArray[0].data.records;
      vm.TT0101Value = vm.TT0101[0].Mnish;
      console.log(vm.TT0101Value);
      console.log(vm.TT0101[0].Mnish);
    });

    // 如果需要单独的请求,同样用vm绑定
    $http.get("cryostat/cryostat.conn.php")
      .then(function (response) {
        vm.resss = response.data.records;
      });
  }
});

模板调整(优化显示)

确保模板里的绑定逻辑正确,把值放到对应的位置:

<table id="penetration">
  <tr>
    <th>Penetration Pipe 33.1</th>
    <th>Penetration Pipe 33.2</th>
  </tr>
  <tr>
    <td>
      TT0101: <span class="value">{{ $ctrl.TT0101Value }}</span><br/>
      TT0102: <br/>
      TT0103: 
    </td>
    <td>TT0107: </td>
  </tr>
</table>

这样调整后,你的SQL查询结果就能正确绑定到模板上显示了。

内容的提问来源于stack exchange,提问作者George Salukvadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:42:56