2016-11-18 8 views
2

Я хочу установить две функции в ngStyle. Я пробовал [ngStyle]="setAlignmentStyle(element.alignment);setShapeStyle(element.shape);", но он дает ошибки анализа шаблонов.Angular2 две функции в NgStyle

Как установить две функции в ngStyle?

page.component.ts

export class PageComponent { 

    // ... 

    setAlignmentStyle(alignment) { 
     let styles = { 
      'margin': alignment === 'center' ? '0 auto' : '', 
      'float': alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : ''), 
     }; 
     return styles; 
    } 

    setShapeStyle(shape) { 
     let styles = { 
      'border-radius': shape === 'circle' ? '50%' : '', 
     }; 
     return styles; 
    } 
} 

page.component.html

<div [ngStyle]="setAlignmentStyle(element.alignment);setShapeStyle(element.shape);">{{element.text}}</div> 
+0

Что такое ожидаемое поведение? Вы не можете вернуть два объекта и ожидать, что 'ngStyle' применит их оба, что не будет работать. Вы должны комбинировать их с одним объектом самостоятельно. –

+0

Мне нужно, чтобы 'setAlignmentStyle (выравнивание)' и 'setShapeStyle (shape)' вместе давали бы один объединенный стиль, e. g., '[ngStyle] =" setAlignmentStyle ('center'); setShapeStyle ('circle'); "' даст 'margin: 0 auto; border-radius: 50% ' –

+0

Это не сработает. Вам нужно вызвать одну функцию, которая возвращает один объект со свойствами обоих. Я бы предложил не вызывать функцию вообще и просто назначить объект свойству в вашем компоненте и привязать его к этому свойству. –

ответ

1

Я применил принцип конструкции декоратор (это не является строгим декоратор).

export class PageComponent { 

    // ... 

    setAlignmentStyle(alignment, styles) { 
     styles = styles || {}; 

     styles.margin = alignment === 'center' ? '0 auto' : ''; 
     styles.float = alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : ''); 

     return styles; 
    } 

    setShapeStyle(shape, styles) { 
     styles = styles || {}; 

     styles['border-radius'] = shape === 'circle' ? '50%' : ''; 
     return styles; 
    } 
} 
<div [ngStyle]="setAlignmentStyle(element.alignment, setShapeStyle(element.shape))">{{element.text}}</div> 
2

ngStyle не объединить несколько объектов.

Использование функций в представлении (кроме обработчиков событий) в любом случае не рекомендуется, так как такие функции вызываются очень часто.

В вашем случае это приведет к исключениям, потому что методы возвращают новый экземпляр каждый раз.

export class PageComponent { 
    styles = {} 

    ngOnInit() { 
     this.setAlingmentStyle('xxx'); 
     this.setShapeStyle('yyy'); 
    } 

    // ... 

    setAlignmentStyle(alignment) { 
     this.styles.margin = alignment === 'center' ? '0 auto' : ''; 
     this.styles.float = alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : ''), 
     }; 
    } 

    setShapeStyle(shape) { 
     this.styles[ 
      'border-radius'] = shape === 'circle' ? '50%' : '', 
    } 
} 

, а затем использовать его как

<div [ngStyle]="styles">{{element.text}}</div> 
0
setStyles(alignment, shape: string) { 
    let styles = {}; 
    switch(alignment){ 
     case 'center' : 
     styles.margin = '0 auto'; 
     break; 
     case 'right' : 
     styles.float = 'right'; 
     break; 
     case 'left' : 
     styles.float = 'left'; 
     break; 
    } 
    switch(shape){ 
     case 'circle' : 
     styles['border-radius'] = '50%'; 
     break; 
    } 

    return styles; 
} 

// HTML 

<div [ngStyle]="setStyles(element.alignment, element.shape);">{{element.text}}</div> 

 Смежные вопросы

  • Нет связанных вопросов^_^