首页 > 解决方案 > 失去变量的范围

问题描述

所以在我的 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"
});

标签: angularjs

解决方案


您的服务调用 requestLocTaskOptions 发生了什么是异步调用,这意味着它不会停止线程执行。所以它将继续并执行

console.log(vm.locOptions); // Which is null currently as your callback is not executed yet

检索结果后,将执行 then 回调并设置 vm.locOptions。

因此,您需要的代码/业务必须包含在 Then Call back 中,或者您可以在 vm.locOptions 上创建观察程序,以便在值更改时执行。


推荐阅读