【问题标题】:ng-model="query" not working after connecting to Firebaseng-model="query" 连接到 Firebase 后无法正常工作
【发布时间】:2014-12-11 10:12:39
【问题描述】:

我正在处理的项目的一部分是列出成员、成员公司等...我在控制器中使用 $http 连接到 JSON 文件以连接所有内容并测试功能。我正在使用 ng-repeat 填充页面和 ng-scope 以允许访问者搜索列表。

在我连接 Firebase 以保存数据之前,一切都按预期进行。同样,数据填充页面,但现在我的 ng-model 已损坏,无法搜索列表。至少可以说,我的 Angular 技能仍在完善中,所以我确信我有一个菜鸟时刻。任何有机会有人可以看看,我将非常感激。这是我的代码。

我的控制器

.controller( 'AlliedCtrl', function AlliedCtrl( $scope, $firebase) {
    var ref = new Firebase("https://mybase.firebaseio.com/members");
    var sync = $firebase(ref);
    var syncObject = sync.$asObject();
    syncObject.$bindTo($scope, "members");
});

我的 HTML

<div class="search-sort">
                <div class="row">
                    <div class="col-sm-12 col-xs-12">
                        <input ng-model="query" placeholder="Search and Sort by Keyword e.g. Accounting, Law, Mobile etc..." class="small">
                    </div>
                    </div>
            </div>

            <table class="table table-condensed table-responsive">
                <thead>
                <tr>
                    <th></th>
                    <th>Member Company</th>
                    <th>Company Description</th>
                </tr>
                </thead>
                <tbody>
                <tr ng-repeat="m in members | filter:query">
                    <td style="width:250px"></td>
                    <td style="width:250px"><b>{{ m.company }}</b><br>{{ m.address }}<br>{{ m.address2 }}<br><a href="{{ m.url }}" target="_blank">{{ m.url }}</a><br><br>{{ m.name }}<br><em>{{ m.title }}</em><br>{{ m.phone }}<br><a mailto="{{ m.email }}">{{ m.email }}</a><br><br></td>
                    <td>{{ m.description }}</td>
                </tr>
                </tbody>
            </table>

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat firebase


    【解决方案1】:

    如果我正确理解您的问题,您需要等到syncObject 加载完毕,所以...

    //Controller
    var members = syncObject.$loaded().then(function() {
      members.$bindTo($scope, "members");
    }
    

    【讨论】:

      【解决方案2】:

      如果您想对来自 Firebase 的集合使用 ng-repeat,则必须调用 $asArray 而不是 $asObject + $bindTo

      所以在你的控制器中:

      var ref = new Firebase("https://mybase.firebaseio.com/members");
      var sync = $firebase(ref);
      var syncObject = sync.$asArray();
      $scope.members = syncObject;
      

      【讨论】:

      • 太棒了!!谢谢你。奇迹般有效。 @tommyd456 - 感谢您抽出宝贵时间帮助我。
      • 澄清一下,可以使用带有 ng-repeat 的对象(例如 ng-repeat="(key,val) in object"),但它们不能与过滤器一起使用或保证排序,这是数组变得必要的地方。
      • 这样的 ng-repeat 就像“对象中的每个 (propertyName, propertyValue)”,对吗?如果您不知道有哪些属性,这非常有用,但在这种情况下不知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2014-09-30
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多