为什么我的数组变量在填充后没有显示在ng-repeat中? (Angular Js)

时间:2017-05-29 06:05:22

标签: angularjs arrays laravel-5.4 laravel-blade

在我的应用程序中,在初始化中,我已声明

vm.allStates = [];

然后我使用ng-click触发一个函数,并根据国家/地区更新状态。

vm.allStates = result;
console.log(vm.allStates);

通过这样做我得到了所需的输出。我的输出类似于

["selangor"];

然而在HTML刀片中(因为我正在使用Laravel 5.4),我写的地方

<option ng-repeat="option in vm.allStates" value="{{ option }}">@{{ option }}</option>

它不会输出任何内容。 同时,如果在初始化中,我说明了,

vm.allStates = ["selangor"];

它会显示,但这不会动态。

我想知道这是否与ng-model有关? 因为它不更新值,但是,我可以在console.log输出。

我没有使用ng-options,因为我需要一个选定的值作为占位符(在这种情况下是一个默认禁用和选择的选项。

谢谢

编辑1:

storeService.storeByCountry(vm.countryId).then(function (response){
                vm.totalStores = response.length;

                if(response[0].country.has_zone){
                    vm.showZones = true;
                    vm.allZones = [...new Set(response.map(response => response.zone))];
                    vm.totalZones = vm.allZones.length;
                    vm.showFilterZones = true;
                }
                if(response[0].country.has_province){
                    vm.showProvinces = true;
                    vm.allProvinces = [...new Set(response.map(response => response.province))];
                    vm.totalProvinces = vm.allProvinces.length;
                    vm.showFilterProvinces = true;
                }
                if(response[0].country.has_state){
                    vm.showStates = true;
                    vm.allStates = [...new Set(response.map(response => response.state))];
                    vm.totalStates = vm.allStates.length;
                    vm.showFilterStates = true;
                }

                angular.forEach(response, function(value, key) {
                    addMarker({lat : +value.latitude, lng : +value.longitude}, vm.countryFilter);
                });
                console.log(vm.allStates);
                panToCountry(vm.countryFilter);
                return;
            }, function(error){
                APP.func.alerror(error);
            });

2 个答案:

答案 0 :(得分:1)

您的代码问题可能是您在vm.allState中使用html。你不应该这样做(除非vm确实是别名)。我相信vm会引用你的控制器实例(就像通常那样)。在这种情况下,您应该使用html中的控制器别名来使用控制器内的任何变量。

说明:

如果你的控制器有vm.name = "Superman";

这将在html ctrl.name中提供,而不是vm.name。您可能以不同的方式命名别名,并且应该使用相同的别名。

答案 1 :(得分:0)

经过一天的调试和思考,事实证明这个问题不是由角度不更新阵列引起的。事实上它确实如此。 这里的问题是我使用的选择样式插件。

我使用bootstrap-select作为选择框的外观,结果是,那里的值没有更新, 所以,当我删除这个插件,我可以看到我想要的结果。 当然,这个问题有解决方法,但我决定不再深入研究