¿Filtro AngularJS basado en una matriz de cadenas?

Me resulta difícil entender cómo hacer un filtro angular para resolver un problema con el que me encuentro.

Aquí hay un ejemplo básico de mi estructura de datos, una serie de tareas:

var tasks = [
    { Title: "This is a task title",
      Tags: ["Test","Tag","One","Two","Three"] },
    { Title: "Another test tag title",
      Tags: ["Some", "More", "Tags"] },
    { Title: "One more, why not",
      Tags: ["I","Like","Dirt"] },
    { Title: "Last one!",
      Tags: ["You","Like","Dirt"] }
];

Entonces cada objeto tiene una serie de etiquetas. Por ejemplo, digamos que estoy generando cada uno de esos objetos como una fila en una tabla.

Una vez que las páginas ng-controller se inicializan, estoyagarrando todas las etiquetas de todas las tareas (sin duplicados) y ensamblarlos en untags formación.

Luego, estoy generando esas etiquetas como botones que se pueden alternar en la página. Todos los botones son azules de forma predeterminada, lo que significa "activo" (en otras palabras: mostrar tareas con esta etiqueta contenida en el mismo). Necesito poder hacer clic en uno de esos botones para "desactivar" esa etiqueta, lo que filtrará las filas de tareas en la tabla en la que la tarea tiene esa etiqueta.

Igual que para referencia visual: gray = "ocultar tareas cuyas etiquetas contienen esta etiqueta", blue = "mostrar tareas cuyas etiquetas contienen esta etiqueta":

.

Al hacer clic en un botón, se vuelve gris, filtrando cualquier tarea en la tabla que tenga esa etiqueta. Luego puedo volver a hacer clic en los botones para volver a activar esa etiqueta y volver a mostrar todas las tareas con esa etiqueta.

¿Estoy explicando esto con suficiente claridad? Es un sistema confuso.

De todos modos, he intentado lo siguiente:

ng-filter="task in filteredWithTags = (tasks | filter: { tags: arrayOfTags }" en vano.

¿Alguien le importa apuntarme en la dirección correcta? :)

PD: Tuve esto trabajando a principios de esta semana llamando a unfilterByTag(tag) funcionar en mi controlador. Esto recorrería cada tarea en la matriz de tareas y si tuviera la etiqueta que coincidiera, la ocultaría. similarreactivar una etiqueta haría lo mismo, recorrerá a todos y hará la magia ... pero me dijeron que mi método era lento + exagerado, porque "los filtros angulares pueden manejar todo eso por usted, y será mejor- práctica ". Por lo tanto, por qué estoy aquí, tratando de descubrir cómo dejar que Angular haga el trabajo por mí :)

Cualquier ayuda es apreciada!

Respuestas a la pregunta(1)

Su respuesta a la pregunta