亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Angular中使用cli生成自定義文件

發布時間:2021-03-26 16:25:49 來源:億速云 閱讀:138 作者:Leah 欄目:web開發

這篇文章給大家介紹怎么在Angular中使用cli生成自定義文件,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

自定義原理圖

先看看我們的需求,我們現在項目的項目里面,頁面是page,按照angular原來的寫法,所有的page的組件都是:XXXX.component.ts。我們為了將頁面和組件進行區分,頁面的文件都是XXX.page.ts。我們先在node_module/@Schematics/angula/下面復制component新建一個page。

現在,將page下面的files文件夾中的文件名.component都改為.page(由于我們不用單元測試文件,直接刪除.spec.ts文件即可):

page

  1. files

    1. __name@dasherize@if-flat__

    2. __name@dasherize__.page.__styleext__

    3. __name@dasherize__.page.html

    4. __name@dasherize__.page.ts

  2. index.d.ts

  3. index.js 命令運行時會執行這個js文件

  4. schema.d.ts

  5. schema.json 定義了這個生成器命令可以接受的參數

接下來再看page里面的index.js,這個js文件在我們跑自己的命令的時候會執行。看這個文件,里面的代碼雖然有點看不懂,但是猜猜還是可以的,有些關鍵地方:

const componentPath = `/${options.path}/`
      + (options.flat ? '' : core_1.strings.dasherize(options.name) + '/')
      + core_1.strings.dasherize(options.name)
      + '.component';
const classifiedName = core_1.strings.classify(`${options.name}Component`);

類似于這樣的地方,我們發現就是創建對應的組件文件和里面的組件類。所以我們把所有.component和}Component的地方替換為.page和}Page:

const componentPath = `/${options.path}/`
      + (options.flat ? '' : core_1.strings.dasherize(options.name) + '/')
      + core_1.strings.dasherize(options.name)
      + '.page';
const classifiedName = core_1.strings.classify(`${options.name}Page`);

然后接下來再看page/files/__name@dasherize__.page.ts:

import { Component, OnInit<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
@Component({
 selector: '<%= selector %>',<% if(inlineTemplate) { %>
 template: `
  <p>
   <%= dasherize(name) %> works!
  </p>
 `,<% } else { %>
 templateUrl: './<%= dasherize(name) %>.component.html',<% } if(inlineStyle) { %>
 styles: []<% } else { %>
 styleUrls: ['./<%= dasherize(name) %>.component.<%= styleext %>']<% } %><% if(!!viewEncapsulation) { %>,
 encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
 changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
})
export class <%= classify(name) %>Component implements OnInit {
 constructor() { }
 ngOnInit() {
 }
}

這個是生成的組件的ts模板,我們需要根據我們的需求來改造,首先是文件里面的類,既然我們現在的文件名是XXX.page.ts,那么里面的類也就需要時XXXPage形式的,并且我們的頁面是不允許作為指令的形式出現的,所以也要去掉selector元數據。那綜合下來,我們的__name@dasherize__.page.ts應該修改為:

import { Component, OnInit<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
@Component({
 templateUrl: './<%= dasherize(name) %>.page.html',
 <% if(inlineStyle) { %>
 styles: []<% } else { %>
 styleUrls: ['./<%= dasherize(name) %>.page.<%= styleext %>']<% } %><% if(!!viewEncapsulation) { %>,
 encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
 changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
})
export class <%= classify(name) %>Page implements OnInit {
 constructor() { }
 ngOnInit() {
 }
}

OK,目前為止,我們的“原理圖”就創建的差不多了,我們現在需要加入cli指令上去。在@Schematics/angular/collection.json里面定義了cli的命令,同樣,先觀察componet的命令:

"component": {
  "aliases": [ "c" ], // 簡寫形式
  "factory": "./component", // 采用生成器
  "description": "Create an Angular component.",
  "schema": "./component/schema.json"
},

我們來創建我們自己的命令:

"component": {
  "aliases": [ "pa" ], // 簡寫形式
  "factory": "./page", // 采用生成器
  "description": "Create an Angular component page.",
  "schema": "./page/schema.json"
},

測試命令

目前為止,我們已經添加好了我們自己的生成命令,現在來嘗試著生成一個page組件,在app/pages/user下面生成組件user-test,命令:ng g page pages/user/user-test,查看結果:

CREATE src/app/pages/user/user-test/user-test.page.css (0 bytes)
CREATE src/app/pages/user/user-test/user-test.page.html (28 bytes)
CREATE src/app/pages/user/user-test/user-test.page.ts (239 bytes)
UPDATE src/app/pages/user/user.module.ts (1803 bytes)

看看生成的ts文件:

import { Component, OnInit } from '@angular/core';
@Component({
 templateUrl: './user-test.page.html',
 styleUrls: ['./user-test.page.css']
})
export class UserTestPage implements OnInit {
 constructor() { }
 ngOnInit() {
 }
}

非常好啊,完全滿足我們的需求。

慢著,我現在項目中使用的是less,而且使用component創建的組件里面的樣式文件都是less,為啥我們自定義的生成的是css文件???

很可能是沒有識別我們自定義的less,那我們自定義的less是怎么定的呢?看看angular.json文件中有個project里面:

"schematics": {
  "@schematics/angular:component": {
    "styleext": "less"
  }
},

也就是說,我們在這里配置了生成component組件時,styleext為less,我們的page命令是沒有配置的,所以會找默認的樣式文件后綴。那我們在這里嘗試加上試試看:

"schematics": {
  "@schematics/angular:component": {
    "styleext": "less"
  },
  "@schematics/angular:page": {
    "styleext": "less"
  }
},

再生成一下:

CREATE src/app/pages/user/user-test/user-test.page.less (0 bytes)
CREATE src/app/pages/user/user-test/user-test.page.html (28 bytes)
CREATE src/app/pages/user/user-test/user-test.page.ts (240 bytes)
UPDATE src/app/pages/user/user.module.ts (1804 bytes)

關于怎么在Angular中使用cli生成自定義文件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌兰县| 蒙山县| 正宁县| 漳平市| 桃源县| 康马县| 许昌县| 库尔勒市| 长宁县| 彰化市| 山阳县| 常德市| 滁州市| 且末县| 栖霞市| 永胜县| 马公市| 崇阳县| 中卫市| 内丘县| 芜湖县| 宁波市| 济南市| 浦江县| 高要市| 富顺县| 孟津县| 自治县| 天门市| 龙海市| 神池县| 广河县| 桂东县| 西峡县| 股票| 邛崃市| 阳谷县| 千阳县| 衡阳县| 富蕴县| 霞浦县|