在我的应用程序中,在初始化中,我已声明
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);
});
答案 0 :(得分:1)
您的代码问题可能是您在vm.allState
中使用html
。你不应该这样做(除非vm
确实是别名)。我相信vm
会引用你的控制器实例(就像通常那样)。在这种情况下,您应该使用html中的控制器别名来使用控制器内的任何变量。
说明:
如果你的控制器有vm.name = "Superman";
这将在html
ctrl.name
中提供,而不是vm.name
。您可能以不同的方式命名别名,并且应该使用相同的别名。
答案 1 :(得分:0)
经过一天的调试和思考,事实证明这个问题不是由角度不更新阵列引起的。事实上它确实如此。 这里的问题是我使用的选择样式插件。
我使用bootstrap-select作为选择框的外观,结果是,那里的值没有更新, 所以,当我删除这个插件,我可以看到我想要的结果。 当然,这个问题有解决方法,但我决定不再深入研究