10

Ich würde gerne wissen, wenn in Angular 1.5, wenn Sie Komponenten verwenden, gibt es eine einfache Möglichkeit, ein Attribut, das ein Boolescher ist, ohne als Zeichenfolge mit @ konvertiert werden.In Angular 1.5, wie eine Attributkomponente als Boolean gebunden wird?

Zum Beispiel habe ich zwei Komponenten "app-menu" und "app-menueitem" ohne transclude. "app-menu" hat nur ein Attribut mit ist eine Liste von Elementen zum Erstellen von "app-menueitem".

<app-menu items="menuitems"> 

in den menuitems die eine json ist, haben Sie ein Attribut von menuitem dem Namen „isActive“, die einen Booleschen Wert.

$scope.menuitems = [{ label : 'menuitem 1', isactive : true},{ label : 'menuitem 1', isactive : false}] 

Im menuitem Komponente:

angular.module('app') 
    .component('appMenuitem', { 
     transclude: false, 
     controller: menuitemController, 
     bindings: { 
     label: '@', 
     isactive: '@' //<--- The problem is here because the boolean is converted as string 
     }, 
     templateUrl: 'angular/components/simple/menuitem/menuitem.html' 
    }); 

Ich weiß nicht, den besten Weg, am Ende sicher sein ist eine echte boolean, nicht eine Zeichenkette, die mir einige Fehler macht. Jeder hat eine Idee?

Antwort

15

In Winkel 1,5 ab Sie Bindung < & @ für eine Art und Weise nutzen können. Der Hauptunterschied zwischen diesen beiden ist < hat die Fähigkeit, ein Objekt mit seinem ursprünglichen Datentyp an die Komponente zu übergeben.

isactive: '<' 
4

Verwenden Sie einfach eine Einweg-Bindung anstelle einer Zeichenfolge Bindung:

angular.module('app') 
    .component('appMenuitem', { 
     transclude: false, 
     controller: menuitemController, 
     bindings: { 
     label: '@', 
     isactive: '<' 
     }, 
     templateUrl: 'angular/components/simple/menuitem/menuitem.html' 
    });