• 2017-11-07 中文代码示例之Angular入门教程尝试


    "中文编程"知乎专栏原址

    原文: 中文代码示例教程之Angular尝试

    为了检验中文命名在Angular中的支持程度, 把Angular官方入门教程的示例代码中尽量使用了中文命名. 以下源码库在.

    创建项目

    不支持中文命名:

    $ ng new 英雄榜
    Project name "英雄榜" is not valid. New project names must start with a letter, and must contain only alphanumeric characters or dashes. When adding a dash the segment after the dash must also start with a letter.
    英雄榜
    ^

    文本绑定

    不支持中文命名变量

    app.component.ts:

    export class AppComponent {
    题目 = '示例';
    }

    app.component.html:

    <h1>{{题目}}</h1>

    报错:

    compiler.js:466 Uncaught Error: Template parse errors:
    Parser Error: Unexpected token Lexer Error: Unexpected character [题] at column 1 in expression [题目] at column 2 in [{{题目}}] in ng:///AppModule/AppComponent.html@0:4 ("<h1>[ERROR ->]{{题目}}</h1>"): ng:///AppModule/AppComponent.html@0:4
    Parser Error: Lexer Error: Unexpected character [题] at column 1 in expression [题目] at column 2 in [{{题目}}] in ng:///AppModule/AppComponent.html@0:4 ("<h1>[ERROR ->]{{题目}}</h1>"): ng:///AppModule/AppComponent.html@0:4
    Parser Error: Lexer Error: Unexpected character [目] at column 2 in expression [题目] at column 3 in [{{题目}}] in ng:///AppModule/AppComponent.html@0:4 ("<h1>[ERROR ->]{{题目}}</h1>"): ng:///AppModule/AppComponent.html@0:4

    创建component

    创建新component, 貌似支持中文:

    $ ng generate component 英雄
    create src/app/英雄/英雄.component.css (0 bytes)
    create src/app/英雄/英雄.component.html (25 bytes)
    create src/app/英雄/英雄.component.spec.ts (628 bytes)
    create src/app/英雄/英雄.component.ts (310 bytes)
    update src/app/app.module.ts (398 bytes)

    但是报错:

    英雄.component.ts:7 Uncaught ReferenceError: ViewEncapsulation is not defined
    at eval (英雄.component.ts:7)
    at eval (英雄.component.ts:18)
    at Object.../../../../../src/app/英雄/英雄.component.ts (main.bundle.js:58)
    at __webpack_require__ (inline.bundle.js:55)
    at eval (app.module.ts:5)
    at Object.../../../../../src/app/app.module.ts (main.bundle.js:36)
    at __webpack_require__ (inline.bundle.js:55)
    at eval (main.ts:4)
    at Object.../../../../../src/main.ts (main.bundle.js:74)
    at __webpack_require__ (inline.bundle.js:55)

    已向Angular项目提交bug report: Avoid creating component with unicode naming, instead of throwing error after finishing creation.

    后经指出, 上面的错误并不是由中文命名导致. 但由于HTML tag不支持中文(vuejs中也有类似问题), 需要将英雄.component.ts中:

    selector: 'app-英雄',

    改为:

    selector: 'app-heroes',

    在”app.component.html”中添加:

    <app-heroes></app-heroes>

    显示正常. 鉴于Angular在创建Component时自动生成selector代码, 之前的bug report仍然成立, 可以认为Angular本身不支持Component使用中文命名, 但自己修改selector后似乎仍然可用(以观后效).

    添加类型

    支持中文命名!

    添加src/app/英雄.ts:

    export class 英雄 {
    id: number;
    name: string;
    }

    英雄.component.ts中:

    hero: 英雄 = {
    id: 1,
    name: '小明'
    };

    显示列表

    由于中不能用中文命名, 因此<li *ngFor="let hero of heroes">中的hero不能用中文命名, 而heroes如果改为英雄们, 会报错:

    Parser Error: Lexer Error: Unexpected character [们] at column 15 in expression [let hero of 英雄们] at column 16 in [let hero of 英雄们] in ng:///AppModule/__Component.html@2:6 ("
    <ul class="heroes">
    <li *ngFor="let hero of 英雄们">
    <span class="badge"></span>[ERROR ->]
    </li>
    </ul>"): ng:///AppModule/__Component.html@3:42

    小结

    限于时间, 评测只能暂告一段落. 在尝试的很小一部分功能中, 比较纯粹的TypeScript部分允许中文命名, 但牵涉到模板(Template)的部分对中文命名的支持非常有限.

  • 相关阅读:
    DB2控制中心创建触发器
    将web应用迁到TongWeb
    DB2自增列数据处理
    Android 所有版本区别总结(转)
    C#强制关闭Excel进程(通过COM使用Excel时)
    Web开发中的ContentType类型大全
    Javascript中闭包(Closure)的探索(一)基本概念
    Javascript 中闭包(Closure)的探索(三)私有函数中的this
    VS2008中Web Reference和Service Reference的区别
    ASP.NET中模拟管理员用户提升权限
  • 原文地址:https://www.cnblogs.com/program-in-chinese/p/use-Chinese-naming-in-AngularJS.html
Copyright © 2020-2023  润新知