【问题标题】:Binding best practise绑定最佳实践
【发布时间】:2016-04-16 17:44:07
【问题描述】:

我有一个接受字符串作为输入参数的组件。 字符串应该本地化,所以我以这种方式绑定该字符串:

<drawer-item [text]="getSectionName (Routes.Companies)" >...

通过这种方式,一切正常,但我在 getSectionName 函数中设置了一个断点,我注意到该函数被很多次调用。 在启动时被调用 5-6 次,然后每次我在应用程序中执行某些操作时都会再次调用它。

这是正确的行为还是对表演有危险?

非常感谢

编辑 管道:

@Pipe({
    name: 'route',
    pure: false
})
export class RoutePipe implements PipeTransform {
    static i:number = 0;
    transform(route: Route) {
        switch (route.state) {
            case Routes.StartPage.state:
            console.log (RoutePipe.i++);
                return "H";
            case Routes.Companies.state:
                return "G";
            case Routes.Settings.state:
                return "F";
            case Routes.Users.state:
                return "E";
            case Routes.CoursesSources.state:
                return "D";
            case Routes.DocumentSources.state:
                return "C";
            case Routes.Notifications.state:
                return "B";
            case Routes.NonDocumentalExpirations.state:
                return "A";
            default:
                break;
        }
    }
}

编辑 关于管道的一个很好的解释可以在here找到。

【问题讨论】:

    标签: angular


    【解决方案1】:

    由于您提到的性能影响,不鼓励在绑定表达式中使用函数。

    更喜欢将函数结果分配给字段并绑定到该字段。

    在您的具体示例中,管道可能是合适的解决方案。

    【讨论】:

    • 但即使存在expressionvariable reference,该表达式也会在CD 运行时进行计算。那么性能有什么影响呢?道歉,如果我错过了什么..
    • 比较两个值的身份很便宜,相比之下调用函数很昂贵(尽管与 HTTP 请求相比没有什么)但是如果你有很多绑定,它可以总结出来。
    • 使用管道它仍然被调用很多次。此时我认为这是Angular2的正常行为
    • 你如何使用管道?在devMode 中,它被调用了两次,而在prodMode 中仅被调用。
    • OP 随管道更新。没错,在 devMode 中调用了 18 次,在 prodMode 中调用了 6 次
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多