如何在Angular2上的结构指令中包含多个语句

时间:2016-09-15 14:42:17

标签: javascript angularjs angular

我是Angular 2的新手,之前没有工作过前端。所以我不确定如何编写模板结构指令。我需要从ejs/angular 1 to Angular 2

翻译一下
for (var i = 0; i < n; i++) {
    <% var classes = item.columns[i].fields.skin.indexOf("sign-in") > -1 ? "sign-in" : "" %>
       <div class="dropdown menu-standout desktop <%= classes %>">
           <a><%= item.columns[i].fields.title %></a>
       </div>
}

我最好的猜测就是这个,但我确定在ngFor内我不能两次使用大括号。有什么帮助吗?

<li *ngFor="let column of item.columns">
    {{var classes = column.fields.skin.indexOf("sign-in") > -1 ? "sign-in":""}}
    <div class="dropdown menu-standout desktop" {{ classes }}>
        <a>{{column.fields.title}}</a>
    </div>
</li>

3 个答案:

答案 0 :(得分:0)

can not have binding assignment in template interpolation directive。 所以,应该是这样的

{{column.fields.skin.indexOf("sign-in") > -1 ? "sign-in":""}}

can not declared variable inside interpolation directive

从模板中删除var classes =部分,否则将模板解析错误。

答案 1 :(得分:0)

你想动态添加一个类,所以试试这个:

<li *ngFor="let column of item.columns">

    <div  [class.active] = "isActive = 'column.fields.skin.indexOf("sign-in") > -1 ? "sign-in":"" ' " class="dropdown menu-standout desktop"> 
        <a>{{column.fields.title}}</a>
    </div>
</li>

在您的视图中使用js代码并不是一种好习惯。

您组件中的

export class MyComponent {

isActive: boolean = false;
}

答案 2 :(得分:0)

我通过编写额外的函数来修复语法

<li *ngFor="let column of item[0].fields.columns">
    <div class="dropdown menu-standout desktop {{ checkIndex(column) }}" > 
        <a>{{column.fields.title}}</a>
    </div>
</li>   

export class PageDropdownComponent {
    constructor() {}

    checkIndex(classes:any) {
        return classes.fields.skin.indexOf("sign-in") > -1 ? "sign-in" : "";
    }

感谢其他人的帮助,这对于理解语法

非常有用