访问嵌套视图时未定义的已解析数据

时间:2014-02-21 23:24:36

标签: angularjs firebase angular-ui-router

我尝试将Firebase集成到基于UI-Router示例的简单AngularJS项目上。

这似乎使用导航流程很好......但实际上在使用例如直接网址直接访问嵌套视图时得到了一个未定义的变量:#/ contacts / 42

您可以在以下plunker上测试和查看源代码: http://plnkr.co/edit/1CnwHl9rsOifzWoSYg8V?p=preview

正如您在firebug中看到的,我收到以下错误: 错误:contacts [i]未定义

Contacts是工厂'ContactDB'的变量,它来自firebase后端和状态'contacts'的解析数据。

似乎$ scope.contacts已损坏。只设置了第一个项目......

我真的不明白这个问题的原因......?!

如果有人可以帮助我真的很棒。 在此先感谢您的光临。

1 个答案:

答案 0 :(得分:0)

我也在使用ui-router和firebase,并且在尝试获取状态路由更改时显示的联系人数时遇到问题。我在我的联系人控制器中使用numChildren()。

.controller( 'contactsCtrl', function contactsCtrl( $scope, filterFilter, orderByPriorityFilter, contacts, FBURL ) {
  var contactsRef = new Firebase(FBURL+'/contacts');
  $scope.entryLimit = 50;
  $scope.search = $scope.lastSearch.search;

  contactsRef.on('value', function(snap) {
    $scope.contacts = contacts;//contacts is a resolved $firebase Object
    $scope.contactsCount = snap.numChildren();
  });


  $scope.$watch('search', function(oldTerm, newTerm) {
    $scope.filtered = filterFilter(orderByPriorityFilter($scope.contacts), oldTerm);
    $scope.contactsCount = $scope.filtered.length;
    $scope.lastSearch.search = oldTerm;

    //sets contacts list page to 1 on new searches
    if (oldTerm != newTerm) {
      $scope.contactListPos.page = 1;
    }

  });

});

如果从浏览器栏加载/ contacts路径或刷新页面,这样可以正常工作。但是如果我改变状态来说我的/ home状态有一个链接转到/ contacts,$ scope.contactsCount将显示0.我在搜索输入中也有一个$ watch,只有当我进行搜索时才会触及contactsCount更新。当我进入contacts.detail子状态然后回到联系人状态时,contactsCount也会正确更新。

我能够通过使用if / else语句编辑$ watch回调来实现它:

if (newTerm === oldTerm) { //first run
  return;
} else {
  $scope.contactsCount = $scope.filtered.length;
}