我正在尝试从数据库中提取的数据中创建一个选择下拉列表,以便选择我的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也可以轻松初始化,但是这是多年来的另一个故事,当我刷新应用程序有时列表出现,有时候它没有t(下拉列表为空)。 因为它看起来正确,这意味着问题不在SQL中,但是什么使它消失?能帮我看看我做错了吗?
提前致谢
答案 0 :(得分:2)
您正在socket.io对象的事件处理程序中设置$scope.years
。这是从Angular之外的外部源触发的,这意味着它不知道更改,因此不会运行$digest()
来更新页面。
设置years
和year
属性后,您需要手动调用$scope.$apply()
:
socket.on('response', function (data){
$scope.years = data.rep;
$scope.year = "2016";
$scope.$apply();
});
它可能偶尔似乎有效,因为页面上的其他操作导致Angular运行$digest()
,并且年份下拉列表会重新呈现为副作用。