简体   繁体   English

AngularJs从ng-repeat过滤输入到Javascript变量?

[英]AngularJs get filtered input from ng-repeat to a Javascript variable?

I'm currently working with AngularJs and am filtering an input array with a number of select boxes. 我目前正在使用AngularJs,并且正在使用多个选择框过滤输入数组。 On the filtered result, I'm running an ng-repeat to display each element in my now filtered array. 在过滤后的结果上,我正在运行ng-repeat来显示我现在过滤后的数组中的每个元素。 Now my question. 现在我的问题。 I want to save the filtered input array as an javascript variable, to later display or print the whole result. 我想将过滤后的输入数组另存为javascript变量,以便以后显示或打印整个结果。 I actually only want either the filtered input array saved to a javascript variable or even better, the results of each ng-repeat saved altogether in a variable but updating itself after applying a new filter or a filter again. 我实际上只希望将过滤后的输入数组保存到javascript变量中,甚至更好,将每个ng-repeat的结果完全保存在一个变量中,但是在应用新的过滤器或再次使用过滤器后进行更新。 I'm stuck here. 我被困在这里。 Is there a smooth way to do this. 有没有一种顺利的方法来做到这一点。 Or do you have a even better idea what would work here? 还是您有一个更好的主意,什么可以在这里工作? Thank's already. 谢谢了 Let's say we have a filter for languages and name: 假设我们有一个用于语言和名称的过滤器:

<select class="form-control"
              ng-options="l.language for l in languages"
              ng-model="languageModel"
              ></select>
<select class="form-control"
              ng-options="n.name for n in names"
              ng-model="nameModel"
              ></select>


<ul ng-repeat="sq in input| filter:languageModel| filter:nameModel>

<li>Language: {{sq['Language']}}</li>
<li>Name: {{sq['Name']}}</li>
</ul>

Now I want something like : 现在我想要类似的东西:

$scope.var = ... // The filtered result. $ scope.var = ... //过滤后的结果。

You can directly store the array in your ng-repeat 您可以将数组直接存储在ng-repeat

<ul ng-repeat="sq in (filteredInput = (input| filter:languageModel| filter:nameModel))>

Now you can access $scope.filteredInput to get the filtered array 现在您可以访问$scope.filteredInput以获取过滤后的数组

You can call the filter directly from javascript: 您可以直接从javascript调用过滤器:

$scope.filteredInput = $filter('languageModel')($scope.input);

Where languageModel is the name of your filter. 其中languageModel是过滤器的名称。 Make sure to inject $filter in your controller. 确保在控制器中注入$filter

By the way, it is weird to have the ng-repeat on the <ul> element. 顺便说一句,在<ul>元素上使用ng-repeat很奇怪。 Something more appropriate would be to put it on the <li> : 更合适的方法是将其放在<li>

<ul>
    <li ng-repeat="sq in input| filter:languageModel| filter:nameModel>
        <span>Language: {{sq['Language']}}</span>
        <span>Name: {{sq['Name']}}</span>
    <li>
</ul>

You can write your own filter function in your code behind, something like this 您可以在后面的代码中编写自己的过滤器功能,如下所示

$scope.filterlanguage=function(item){

//add your condition if satisfies return or null
if(condition)
{
return item;
}
return null;


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM