使用firebase动态更改img ng-repeat

时间:2016-09-20 09:43:03

标签: javascript angularjs firebase angularjs-ng-repeat firebase-realtime-database

我有一个页面,老师可以选择一个班级(学生)。然后,教师可以通过拖动学生的头像来创建这个班级的学生群体。

我有一个下拉列表和一个div填充了学生的头像。

HTML:

<select name="chosenClass" onchange="chooseClass(this.value)">
    <option ng-repeat="(key, value) in techerClasses">{{key}}</option>
</select>
...
<div id="div0" ondrop="drop(event)" ondragover="allowDrop(event)" class="groupDiv">
    <img ng-repeat="(key, value) in classStudents"  id={{key}} src="http://placehold.it/30x30/{{value}}" draggable="true" ondragstart="drag(event)">
</div>

控制器代码:

chooseClass = function (classInfo) {
    if (classInfo > 0){
        $rootScope.classesRef.child(classInfo).on('value', function (dataSnapshot){
            $rootScope.classStudents = dataSnapshot.val().members;
        });
    }
}
  1. 如果我之前手动将数据添加到$rootScope.classStudents 页面加载的头像将正确显示。

  2. 之后
  3. console.log($rootScope.classStudents) $rootScope.classStudents = dataSnapshot.val().members;确认 正确的数据在那里。

  4. 但是头像没有显示。

  5. 如果我在浏览器中单击“返回”,然后“转发” - 头像 将会呈现。这让我觉得我需要的东西会 告诉<img ng-repeat...刷新?

2 个答案:

答案 0 :(得分:3)

你错过了$ rootScope。$ apply,因为你已经完成了一些角度以外的事情:

chooseClass = function (classInfo) {
    if (classInfo > 0){
        $rootScope.classesRef.child(classInfo).on('value', function (dataSnapshot){
            $rootScope.classStudents = dataSnapshot.val().members;
            $rootScope.$apply();
        });
    }
}

或者考虑使用$firebaseArray

chooseClass = function (classInfo) {
    if (classInfo > 0){
        $rootScope.classStudents = $firebaseArray($rootScope.classesRef.child(classInfo).child('members'))
    }
}

答案 1 :(得分:0)

src="http://placehold.it/30x30/{{value}}"设置为ng-src="http://placehold.it/30x30/{{value}}",将src属性添加到摘要中。

$rootScope.$apply$timeout(angular.noop)如果您需要&#34;保存摘要&#34;