angularjs - 失去变量的范围
问题描述
所以在我的 angularJS 程序中,我试图从数据库中检索数据,我成功地这样做了,但随后丢失了我的变量的值。为什么会这样,我该如何解决?
function loadLocOptions() {
locTaskOptionsReq.requestLocTaskOptions(vm.task).then(function (data) {
if (data == null) {
vm.locOptions = locTaskOptionsService.getEmptylocTaskOption();
vm.locOptions.ERPKey = sessionService.getCurrentUser().ERPKey;
vm.locOptions.LocKey = sessionService.getCurrentUser().LocKey;
} else {
vm.locOptions = data;
}
vm.locOptionsLoaded = true;
// Data is here
console.log(vm.locOptions);
});
// Now is null
console.log(vm.locOptions);
}
我正在尝试调用 use mylocOptions
来使用我的 html:
<div ng-repeat="loc in vm.locOptions">...</div>
这也是我的控制器:
module.component("asaLocOptionsComponent", {
bindings: { task: '='},
controllerAs: "vm",
controller: ["$scope", "$location", "shellPageAdapter", "sessionService", "staticData", "activeData", "ScreenModes", "localizationService", "locationReq", "locTaskOptionsService", "locTaskOptionsReq", asaLocOptionsController],
transclude: false,
templateUrl: "/system/SystemManager/app/organization/asaLocOptions.html"
});
解决方案
您的服务调用 requestLocTaskOptions 发生了什么是异步调用,这意味着它不会停止线程执行。所以它将继续并执行
console.log(vm.locOptions); // Which is null currently as your callback is not executed yet
检索结果后,将执行 then 回调并设置 vm.locOptions。
因此,您需要的代码/业务必须包含在 Then Call back 中,或者您可以在 vm.locOptions 上创建观察程序,以便在值更改时执行。
推荐阅读
- r - 修复了 R 中条形图中变量特征的颜色
- python - 不断收到“找不到页面”。该怎么办?
- 3dsmax - 如何通过 Python 重置资产路径
- python - 如何将 pytorch 添加到包含用 C++ 编写的项目的 docker 文件中?
- vue.js - 如何在 Nuxt 中组件和页面的脚本部分访问 vuex
- c++ - c++中的内存泄漏示例
- swift - 如何在 SwiftChart 中为 x 轴使用日期?
- reactjs - 为什么带有 Context Provider 的组件不会重新渲染
- javascript - 如何告诉 JSDoc 我正在扩展具有特定类型的模板类?
- python - F.write 已返回 'io.UnsupportedOperation: not writable' 我不知道为什么