Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何从另一个函数将某些内容推入控制器中的数组?_Angularjs_Firebase - Fatal编程技术网

Angularjs 如何从另一个函数将某些内容推入控制器中的数组?

Angularjs 如何从另一个函数将某些内容推入控制器中的数组?,angularjs,firebase,Angularjs,Firebase,我正在尝试使用angularJS在通讯簿中搜索姓名,但我无法理解一个问题: 这是我的控制器,它应该包含所有当前名称: addressbook.controller('addressBookController', function ($scope) { $scope.names = []; }); 这是我的转发器,它应该显示与搜索输入中的查询匹配的名称: <li data-ng-repeat="name in names | filter: query">{{name}}

我正在尝试使用angularJS在通讯簿中搜索姓名,但我无法理解一个问题:

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

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();
   }