我正在尝试从数据库提取的数据中创建一个选择下拉列表,以便选择我的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/

10-09 23:14