我正在尝试从数据库提取的数据中创建一个选择下拉列表,以便选择我的html的某个日期:
<div>
<div>Select Year</div>
<select class="browser-default" data-ng-model="year">
<option ng-repeat="year in years">{{year}}</option>
</select>
<div>Select Month</div>
<select class="browser-default" data-ng-model="month" ng-options="month.id as month.name for month in months" ></select>
<a class="btn waves-effect waves-light blue darken-1 right bout2" ng-click="changeDate(month, year)">Confirm</a>
</div>
在我的控制器中:
socket.emit('Question', {
// SQL to get the years from database
});
socket.on('response', function (data){
$scope.years =data.rep;
$scope.year = "2016";
});
$scope.list_months = {"months":[{"id":"01","name":"Janvier"},{"id":"02","name":"Fevrier"},{"id":"03","name":"Mars"},{"id":"04","name":"Avril"},{"id":"05","name":"Mai"},{"id":"06","name":"Juin"},{"id":"07","name":"Juillet"},{"id":"08","name":"Aout"},{"id":"09","name":"Septembre"},{"id":"10","name":"Octobre"},{"id":"11","name":"Novembre"},{"id":"12","name":"Decembre"}]};
$scope.months = $scope.list_months.months;
月份的输出运行良好,并且通过将值设置为$ scope.month也可以轻松初始化,但是多年来,这又是另一回事了,当我刷新应用程序时,有时列表会出现而其他时候却没有(下拉列表为空)。
由于正确显示,这意味着问题不在SQL中,而是什么使它消失了?您能帮我找出我做错了什么吗?
提前致谢
最佳答案
您正在事件处理程序中为socket.io对象设置$scope.years
。这是从Angular外部的外部源触发的,这意味着它不知道更改,因此不会运行$digest()
来更新页面。
设置$scope.$apply()
和years
属性后,需要手动调用year
:
socket.on('response', function (data){
$scope.years = data.rep;
$scope.year = "2016";
$scope.$apply();
});
它可能偶尔会起作用,因为页面上的另一项操作导致Angular运行
$digest()
,并且年下拉列表被重新呈现为副作用。关于javascript - Controller 变量无法正确显示在html中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37302508/