Angularjs 如何从另一个函数将某些内容推入控制器中的数组?
我正在尝试使用angularJS在通讯簿中搜索姓名,但我无法理解一个问题: 这是我的控制器,它应该包含所有当前名称:Angularjs 如何从另一个函数将某些内容推入控制器中的数组?,angularjs,firebase,Angularjs,Firebase,我正在尝试使用angularJS在通讯簿中搜索姓名,但我无法理解一个问题: 这是我的控制器,它应该包含所有当前名称: addressbook.controller('addressBookController', function ($scope) { $scope.names = []; }); 这是我的转发器,它应该显示与搜索输入中的查询匹配的名称: <li data-ng-repeat="name in names | filter: query">{{name}}
addressbook.controller('addressBookController', function ($scope) {
$scope.names = [];
});
这是我的转发器,它应该显示与搜索输入中的查询匹配的名称:
<li data-ng-repeat="name in names | filter: query">{{name}}</li>
但我也希望将名字和姓氏放入
$scope.names
数组(例如“Tom Hanks”
),这样我的中继器就可以遍历它。我相信这是非常简单的,但我正在画空白,我在谷歌上的查询没有答案。或者如果有更好的方法,请告诉我。这里是您订购的地方
<li data-ng-repeat="name in names | filter: query | orderBy: 'toString()'">{{name}}</li>
允许您访问应用于图元的角度范围。下面是一个使用document.getElementById()的工作示例:
更新2
orderBy筛选器错误。它需要一根绳子。在本例中,我们使用的是一个简单的字符串数组。因此,我们将每个字符串对象的“toString()”成员调用为dotheorderby
更新3*
搜索补充道query'是一个字符串属性,在本例中由搜索框的ng模型(在控制器范围内)绑定。filter指令将筛选以“查询值”开头的项目*。这里是:您的功能是否在同一控制器中?@mitch No my function在一个对象中。当您将一个对象添加到Firebase(通过其
推送或设置功能或AngularFire等同物之一)时,数据也自动可用于本地代码。因此,如果您有dbContactsRef.on('child_added'
当你调用dbContactsRef.push
@FrankvanPuffelen哇..我只是读了你的提示就解决了,谢谢!似乎不起作用,(yourlementwithcontroller)表示我的模块名,对吗?它是addressbook。我对它进行了一些更新。yourElementWithController是Css选择器,您可以像在JQuery或使用document.getElementById()中一样使用它@Chrillewoodz请参阅update和jsfiddle。我假设您提到的功能未与angular应用程序的其余部分集成。它可以工作,isch..但是搜索字段仅搜索在一个会话中添加的名称,如果我重新加载浏览器,它将因某种原因无法再搜索名称。知道吗?这可以通过持久化数据来解决omewhere。例如,您的控制器需要在控制器的定义中从Firebase读取添加的数据。@mayank建议了一个合适的服务()。该服务将以与定义服务后$scope相同的方式引入控制器(这是假设服务驻留在同一模块下)。您的服务将公开一个函数以返回将分配给scope.names的Firebase数据。
<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();
}