2015-07-10 17 views
6

Sto utilizzando ECMAScript6 in un progetto e sto provando a creare un filtro angolare. Di seguito è il mio tentativo, tuttavia sto ricevendo il seguente errore nella console: Impossibile impostare la proprietà 'PassFilter' di indefinitoECMAScript6 Filtro AngularJS

Sono nuovo sia per ES6 che per Angolare. Ho dovuto eseguire il boot angolare in questo modo a causa di limiti legacy.

myAngularModule = angular.module("MyModule"); 
 

 
angular.element(document).ready(function() { 
 
    var myDiv = $("#myAngularDiv"); 
 
    angular.bootstrap(myDiv, ["MyModule"]); 
 
}); 
 

 
myAngularModule.filter('PassFilter', APP.filters.PassFilter); 
 

 

 

 
/* Filter is in a separate file: */ 
 
class PassFilter { 
 

 
    constructor(input) { 
 

 
    var split = input.split(''); 
 
    var result = ""; 
 
    for (var i = 0; i < split.length; i++) { 
 
     result += "*"; 
 
    } 
 
    return result; 
 

 
    } 
 
} 
 

 
APP.filters.PassFilter = PassFilter;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div id="myAngularDiv"> 
 
    <input type="password" ng-model="password"> 
 
    <span>{{password | PassFilter}}</span> 
 
</div>

+0

Sulla base di un commento, sembra che APP.filters non è definito. – POZ

+0

@POZ - sì è definito in un altro file, sto solo mostrando uno snippet in questo caso delle cose principali:/ – user1809790

+0

Sì, lo capisco. Quello che sto dicendo è: potrebbe essere che le tue librerie non vengano caricate nell'ordine corretto? Ad esempio, posizionerei il tag di script angolare alla fine del mio HTML (best practice con script esterni). – POZ

risposta

6

funzione di filtro in angolare non prende class ma una filter factory function. Questo implica che se si utilizza ES6 è possibile utilizzare lambda (funzione freccia) per implementare il filtro.

myAngularModule.filter('PassFilter',()=> { 
    return (input)=> { 
     var split = input.split(''); 
     var result = ""; 
     for (var i = 0; i < split.length; i++) { 
     result += "*"; 
     } 
     return result; 
    } 
}); 
6

Sono nuovo in Angular. Ho usato la classe per creare un filtro in Angular.

class PassFilter{ 
    constructor(input){ 
    this.input = input; 
    } 

    myMethod() { 
    let input = this.input; 

    let split = input.split(''); 
    let result = ""; 
    for (let i = 0; i < split.length; i++) { 
     result += "*"; 
    } 

    return result; 
    } 

    static PassFilterFactory(input){ 
    let filter = new PassFilter(input); 
    return filter.myMethod(); 
    } 
} 

PassFilter.PassFilterFactory.$inject = ['input']; 

angular.module('myAngularModule', []) 
    .filter('passFilter',() => PassFilter.PassFilterFactory); 

in html

<span>{{password | passFilter}}</span> 
+0

Si tratta di ts o es6? –

+0

non è TS, prova Babel transpiler su di esso - https://babeljs.io/repl/ – shershen

+0

Non è TS, è ES-2015 (ES6) – IuriiBod

2

Sembra che si desidera avere file separati, in modo da:

// star.filter.js 
export default function (input = '') { 
    var split = input.split(''); 
    var result = ""; 
    for (var i = 0; i < split.length; i++) { 
    result += "*"; 
    } 
    return result; 
} 

// star.module.js 
import angular from 'angular'; 

import starFilter from './star.filter'; 

let starModule = angular.module('common.star', []) 
    .filter('star',() => starFilter) 
    .name; 

export default starModule ; 
Problemi correlati