如何将某些东西推入另一个函数的控制器中的数组中?

时间:2014-11-05 17:06:50

标签: angularjs firebase

我尝试使用angularJS进行搜索输入以搜索地址簿中的姓名,但我无法理解问题:

这是我的控制器应该包含所有当前名称:

addressbook.controller('addressBookController', function ($scope) {

    $scope.names = [];
});

这是我的转发器,它应该显示与搜索输入中的查询匹配的名称:

<li data-ng-repeat="name in names | filter: query">{{name}}</li>

以下是将联系人添加到Firebase数据库的功能:

addContact: function() {

    var firstName = document.getElementById('fname').value;
    var lastName = document.getElementById('lname').value;

    dbContactsRef.push({firstName: firstName, lastName: lastName});
}

但是我也希望这会将名字和姓氏推送到$scope.names数组(例如"Tom Hanks"),这样我的转发器就可以遍历它。我确定这很简单,但是我在绘制空白并且我在谷歌上的查询没有答案。或者,如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

这是您订购的地方

<li data-ng-repeat="name in names | filter: query | orderBy: 'toString()'">{{name}}</li>

如果您的函数位于控制器范围之外的对象中,则可以执行

    addContact: function() {

    var firstName = document.getElementById('fname').value;
    var lastName = document.getElementById('lname').value;

     dbContactsRef.push({firstName: firstName, lastName: lastName});
     var scope = angular.element(yourElementWitController).scope();
     ///OR -- angular.element(document.getElementById('address-book')).scope()
     scope.names.push(firstName+' '+lastName);
     scope.$apply();
   }

angular.element()允许您访问应用于元素的角度范围。这是一个使用document.getElementById()的工作示例:

更新2

http://jsfiddle.net/ck9vdkan/3/

orderBy过滤器错误。它需要一个字符串。在这种情况下,我们使用一个简单的字符串数组。因此,我们将每个字符串对象的'toString()'成员称为orderBy。

更新3 * 搜索已添加。 'query'是一个字符串属性,在这种情况下由搜索框的ng-model绑定(在控制器的范围内)。 filter指令将以“查询值”开头过滤项目* 这是:http://jsfiddle.net/ck9vdkan/4/