前端模板引擎對(duì)于array的支持(前端模板引擎對(duì)于array的支持)
本篇文章給大家談?wù)勄岸四0逡鎸?duì)于array的支持,以及前端模板引擎對(duì)于array的支持對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、關(guān)于c語(yǔ)言數(shù)組的一些疑惑?
- 2、04《Spring Boot 入門教程》使用模板引擎開(kāi)發(fā) Web 項(xiàng)目
- 3、thinkphp安全性和可擴(kuò)展性怎樣體現(xiàn)
- 4、web后端和前端是怎么連接的
- 5、CArray
- 6、【前端面試:手寫js系列】flat---數(shù)組扁平化
關(guān)于c語(yǔ)言數(shù)組的一些疑惑?
數(shù)組元素不能做形參,這個(gè)論述是正確的。
我們都知道,單個(gè)元素可以做形參,數(shù)組也可以做形參。但是,二者有本質(zhì)上的區(qū)別。
單個(gè)元素做形參,是建立一個(gè)變量副本,程序運(yùn)行時(shí),實(shí)參把值傳給副本,就沒(méi)有實(shí)參的什么事了,后面對(duì)副本的賦值、改寫,都不會(huì)影響實(shí)參。
而數(shù)組做形參時(shí),只是把實(shí)參的首地址傳給形參,后面對(duì)形參的元素的賦值和改寫,直接對(duì)實(shí)參的數(shù)組元素進(jìn)行了賦值和改寫。
在C語(yǔ)言中,array[10]有兩種含義:
①它指含有10個(gè)元素的數(shù)組array,如:
int array[10];
②它指數(shù)組array的第10號(hào)元素,如:
array[10] =5;
因此,對(duì)于使用數(shù)組array[10](這里,你要把a(bǔ)rray[10]理解成含有10個(gè)元素的數(shù)組array,而不能理解成第10號(hào)元素)做形參,只寫array[]即可(只寫一個(gè)空的中括號(hào))。
但是,數(shù)組做形參時(shí),C語(yǔ)言支持中括號(hào)里面寫入數(shù)字,如array[0]、array[1]或array[10]等,但它們都是一樣的,作用與寫成array[]完全相同。
就是說(shuō),數(shù)組做形參時(shí),你可以無(wú)視中括號(hào)內(nèi)的數(shù)字(程序運(yùn)行時(shí),也不管中括號(hào)內(nèi)的數(shù)字)。
所以,定義函數(shù)語(yǔ)句:
float average( float array[10])
與寫成:
float average(float array[])
完全相同。
補(bǔ)充一點(diǎn),數(shù)組形參的中括號(hào)內(nèi)寫上一個(gè)10,也有一個(gè)好處,它提醒編程人員這里需要一個(gè)含有10個(gè)元素的數(shù)組!但千萬(wàn)不要理解成數(shù)組的第10號(hào)元素做形參。
OK?
04《Spring Boot 入門教程》使用模板引擎開(kāi)發(fā) Web 項(xiàng)目
模板引擎這個(gè)詞,咋聽(tīng)起來(lái),有點(diǎn)高大上的意味。
實(shí)際上,模板引擎是非常平易近人的技術(shù)。譬如大家可能都比較熟悉的 JSP ,就是一種比較典型的模板引擎。
當(dāng)瀏覽器將請(qǐng)求拋給控制器,控制器處理好數(shù)據(jù)后,就跳轉(zhuǎn) JSP 等模板引擎頁(yè)面。注意在跳轉(zhuǎn)的同時(shí),還會(huì)將數(shù)據(jù)組裝好,也交給模板引擎處理。
模板引擎會(huì)根據(jù)數(shù)據(jù),和模板引擎的規(guī)則,動(dòng)態(tài)生成 HTML 頁(yè)面,最后返回給瀏覽器顯示。
我們使用 Spring Boot 開(kāi)發(fā) Web 項(xiàng)目,大體上有兩種方式。
第一種方式,是后端服務(wù)化的方式,也是當(dāng)前的主流方式。前端是靜態(tài)的 HTML 頁(yè)面,通過(guò) Ajax 請(qǐng)求 Spring Boot 的后端接口。 Spring Boot 返回?cái)?shù)據(jù)一般采用 JSON 格式,前端接收后將數(shù)據(jù)顯示。
第二種方式,是采取模板引擎的方式。前端的請(qǐng)求,到達(dá) Spring Boot 的控制器后,控制器處理請(qǐng)求,然后將返回?cái)?shù)據(jù)交給模板引擎。模板引擎負(fù)責(zé)根據(jù)數(shù)據(jù)生成 HTML 頁(yè)面,最后將 HTML 返回給瀏覽器。
我個(gè)人比較推薦第一種方式,說(shuō)一下該方式的幾個(gè)優(yōu)點(diǎn):
本篇是講模板引擎,也得說(shuō)說(shuō)模板引擎的優(yōu)點(diǎn),王婆賣瓜不能光夸草莓啊。模板引擎開(kāi)發(fā)的頁(yè)面,對(duì)搜索引擎 SEO 比較友好;還有就是簡(jiǎn)單的頁(yè)面,如果用模板引擎開(kāi)發(fā)速度比較快,畢竟模板化的方法,目的就是減少重復(fù)提高效率。
Spring Boot 支持的模板引擎種類很多,常見(jiàn)的有 FreeMarker 、 Thymeleaf 、 JSP 。
因?yàn)檫@些模板引擎使用的用戶都不少,所以我們逐一介紹下其實(shí)現(xiàn)過(guò)程。
至于孰優(yōu)孰劣,請(qǐng)各位看官自行評(píng)價(jià)。正所謂:尺有所短,寸有所長(zhǎng),各取所愛(ài),萬(wàn)物生長(zhǎng)!
本篇我們開(kāi)發(fā)一個(gè)商品瀏覽項(xiàng)目實(shí)例。
此處說(shuō)一個(gè)我個(gè)人的經(jīng)驗(yàn):在做一個(gè)項(xiàng)目或一個(gè)模塊的時(shí)候,不要一開(kāi)始就動(dòng)手寫代碼,最好是謀定而后動(dòng)。
我們作為程序員,實(shí)際上是整個(gè)程序世界的總指揮。應(yīng)該先整體規(guī)劃,再實(shí)現(xiàn)局部。這種總分型的開(kāi)發(fā)方法便于我們理順?biāo)悸?,提高編碼效率!
好的,我們來(lái)思考下,實(shí)現(xiàn)商品瀏覽項(xiàng)目實(shí)例的整體流程:
整體流程
可以看到,我們是先建立了控制器方法和頁(yè)面,再去實(shí)現(xiàn)其中的具體細(xì)節(jié)。這樣可以讓我們的思維保持連貫性和整體性,在做一些頁(yè)面和方法較多的項(xiàng)目時(shí),會(huì)感覺(jué)更加順暢。
我們按整體流程,使用 FreeMarker 模板引擎,來(lái)實(shí)現(xiàn)商品瀏覽功能。
使用 Spring Initializr 創(chuàng)建項(xiàng)目,Spring Boot 版本選擇 2.2.5 , Group 為 com.imooc , Artifact 為 spring-boot-freemarker ,生成項(xiàng)目后導(dǎo)入 Eclipse 開(kāi)發(fā)環(huán)境。
引入 Web 項(xiàng)目及 FreeMarker 模板相關(guān)的依賴項(xiàng),代碼如下:
實(shí)例:
創(chuàng)建控制器類,由于是商品相關(guān)的控制器,所以命名為 GoodsController ,代碼如下:
實(shí)例:
我們具體解釋下該類的作用。
我們 resource/templates 目錄下新建商品頁(yè)面 goods.ftl ,先不必實(shí)現(xiàn)具體功能,代碼如下:
實(shí)例:
此時(shí)我們啟動(dòng)項(xiàng)目,然后訪問(wèn) ,即可顯示對(duì)應(yīng)頁(yè)面內(nèi)容。
定義商品類 GoodsDo 用來(lái)描述商品信息,注意 Do 表示數(shù)據(jù)模型對(duì)象(Data Object),代碼如下:
實(shí)例:
然后我們編寫服務(wù)類 GoodsService ,提供獲取商品列表的方法。注意此處僅僅是演示模板引擎,并不需要訪問(wèn)數(shù)據(jù)庫(kù),直接返回一個(gè)指定內(nèi)容的商品列表。
實(shí)例:
此時(shí),我們的控制器就可以注入 GoodsService 類型的組件,然后調(diào)用其方法了。
實(shí)例:
注意 model.addAttribute("goodsList", goodsService.getGoodsList()); ,我們將商品列表相關(guān)的數(shù)據(jù)交給模板引擎去處理。
此時(shí)我們可以根據(jù) FreeMarker 模板引擎,按模板規(guī)則顯示商品信息了。
實(shí)例:
注意我們通過(guò) FreeMarker 的模板語(yǔ)法,輸出了商品列表信息。關(guān)于 FreeMarker 模板引擎更多的語(yǔ)法規(guī)則,感興趣的同學(xué)可以后續(xù)查閱更多資料。
啟動(dòng)項(xiàng)目,打開(kāi)瀏覽器訪問(wèn) ,即可查看輸出結(jié)果。
Thymeleaf 和 FreeMarker ,都是模板引擎,使用方法基本類似。此處我們僅僅是給出一個(gè)范例,不再做過(guò)多的解釋。
使用 Spring Initializr 創(chuàng)建項(xiàng)目, Spring Boot 版本選擇 2.2.5 , Group 為 com.imooc , Artifact 為 spring-boot-thymeleaf ,生成項(xiàng)目后導(dǎo)入 Eclipse 開(kāi)發(fā)環(huán)境。
引入 Web 項(xiàng)目及 Thymeleaf 模板相關(guān)的依賴項(xiàng)。
實(shí)例:
創(chuàng)建控制器類, GoodsController , Thymeleaf 直接使用 HTML 作為模板頁(yè)面,故代碼如下:
實(shí)例:
我們?cè)? resource/templates 目錄下新建商品頁(yè)面 goods.html ,先不必實(shí)現(xiàn)具體功能,代碼如下:
實(shí)例:
此時(shí)我們啟動(dòng)項(xiàng)目,然后訪問(wèn) ,即可顯示對(duì)應(yīng)頁(yè)面內(nèi)容。
商品類 GoodsDo ,服務(wù)類 GoodsService ,這兩個(gè)類與上面沒(méi)有區(qū)別直接放出代碼。
實(shí)例:
實(shí)例:
好的,此時(shí)我們的控制器就可以注入 GoodsService 類型的組件,然后調(diào)用其方法了。
實(shí)例:
此時(shí)我們可以根據(jù) Thymeleaf 模板引擎,按模板規(guī)則顯示商品信息了。
實(shí)例:
注意我們通過(guò) Thymeleaf 的模板語(yǔ)法,輸出了商品列表信息。關(guān)于 Thymeleaf 模板引擎更多的語(yǔ)法規(guī)則,感興趣的同學(xué)可以后續(xù)查閱更多資料。
啟動(dòng)項(xiàng)目,打開(kāi)瀏覽器訪問(wèn) ,即可查看輸出結(jié)果。
到此,大家基本上也能發(fā)現(xiàn),這兩種方式除了模板頁(yè)面文件內(nèi)容不同,其他地方基本都是一模一樣的。
也就是說(shuō),模板引擎主要負(fù)責(zé)通過(guò)一些模板標(biāo)簽,將控制器返回的數(shù)據(jù)解析為網(wǎng)頁(yè)。
注意 Spring Boot 官方已經(jīng)不推薦使用 JSP 了,確實(shí)操作起來(lái)也比較麻煩。但是由于 JSP 用戶體量還是比較大的,所以此處還是簡(jiǎn)單演示下,開(kāi)發(fā)步驟與 FreeMarker / Thymeleaf 基本一致。
使用 Spring Initializr 創(chuàng)建項(xiàng)目, Spring Boot 版本選擇 2.2.5 , Group 為 com.imooc , Artifact 為 spring-boot-jsp ,生成項(xiàng)目后導(dǎo)入 Eclipse 開(kāi)發(fā)環(huán)境。
引入 Web 項(xiàng)目及 JSP 模板相關(guān)的依賴項(xiàng)。
實(shí)例:
創(chuàng)建控制器類, GoodsController ,代碼如下:
實(shí)例:
手工添加 src/main/webapp 及子目錄如下,同時(shí)目錄下放一個(gè) goods.jsp 用于測(cè)試。注意該目錄是一個(gè) Source Folder 源代碼目錄,不是普通文件夾目錄。
spring-boot-jsp 項(xiàng)目結(jié)構(gòu)
實(shí)例:
注意,我們還需要添加一個(gè)視圖解析器,實(shí)現(xiàn) JSP 頁(yè)面往指定目錄跳轉(zhuǎn)。
實(shí)例:
此時(shí)我們啟動(dòng)項(xiàng)目,然后訪問(wèn) ,即可顯示對(duì)應(yīng)頁(yè)面內(nèi)容。
商品類 GoodsDo ,服務(wù)類 GoodsService ,這兩個(gè)類與上面沒(méi)有區(qū)別直接放出代碼。
實(shí)例:
實(shí)例:
好的,此時(shí)我們的控制器就可以注入 GoodsService 類型的組件,然后調(diào)用其方法了。
實(shí)例:
此時(shí)我們可以根據(jù) JSP 模板引擎,按模板規(guī)則顯示商品信息了。
實(shí)例:
注意我們通過(guò) JSP 的模板語(yǔ)法,輸出了商品列表信息。關(guān)于 JSP 模板引擎更多的語(yǔ)法規(guī)則,感興趣的同學(xué)可以后續(xù)查閱更多資料。
啟動(dòng)項(xiàng)目,打開(kāi)瀏覽器訪問(wèn) ,即可查看輸出結(jié)果。
最后大家應(yīng)該也發(fā)現(xiàn)了, FreeMarker 和 Thymeleaf 的用法幾乎是一模一樣的,而 JSP 還需要手工添加一些目錄和配置。
三種方式各有優(yōu)劣, FreeMarker 模板語(yǔ)法比較簡(jiǎn)潔, Thymeleaf 可以直接使用 HTML 作為模板文件, JSP 用戶群體廣泛。
但是三種方式,都是一種模板引擎而已,將控制器返回?cái)?shù)據(jù)轉(zhuǎn)化為 HTML 頁(yè)面顯示,本質(zhì)上沒(méi)啥區(qū)別,大家對(duì)模板引擎有一個(gè)了解即可。
thinkphp安全性和可擴(kuò)展性怎樣體現(xiàn)
ThinkPHP行為擴(kuò)展Behavior應(yīng)用實(shí)例詳解
ThinkPHP的開(kāi)發(fā),具體步驟如下:
ThinkPHP 行為擴(kuò)展 (Behavior) 流程:
最先是讀取配置文件信息:
$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
讀取配置文件信息 ThinkPHP\Mode\common.php
// 行為擴(kuò)展定義
'tags' = array(
'app_init' ? = array(
),
'app_begin' ? = array(
'Behavior\ReadHtmlCache', // 讀取靜態(tài)緩存
),
'app_end' ? ?= array(
'Behavior\ShowPageTrace', // 頁(yè)面Trace顯示
),
'path_info' ? = array(),
'action_begin' = array(),
'action_end' ?= array(),
'view_begin' ?= array(),
'view_parse' ?= array(
'Behavior\ParseTemplate', // 模板解析 支持PHP、內(nèi)置模板引擎和第三方模板引擎
),
'template_filter'= array(
'Behavior\ContentReplace', // 模板輸出替換
),
'view_filter' ?= array(
'Behavior\WriteHtmlCache', // 寫入靜態(tài)緩存
),
'view_end' ? = array(),
),
默認(rèn)調(diào)用了系統(tǒng)行為擴(kuò)展:靜態(tài)緩存讀取 、頁(yè)面Trace顯示輸出、模板解析、模板內(nèi)容輸出替換、靜態(tài)緩存寫入
// 加載模式行為定義
if(isset($mode['tags'])) {
Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
}
// 加載應(yīng)用行為定義
if(is_file(CONF_PATH.'tags.php'))
// 允許應(yīng)用增加開(kāi)發(fā)模式配置定義
Hook::import(include CONF_PATH.'tags.php');
分別用Hook去加載 系統(tǒng)行為和自定義行為,并把配置信息保存到 Hook 私有屬性$tags中
ThinkPHP\Library\Think\Think.class.php 初始化完成后會(huì)調(diào)用App::run();
ThinkPHP\Library\Think\App.class.php文件如下:
/**
* 運(yùn)行應(yīng)用實(shí)例 入口文件使用的快捷方法
* @access public
* @return void
*/
static public function run() {
// 應(yīng)用初始化標(biāo)簽
Hook::listen('app_init');
App::init();
// 應(yīng)用開(kāi)始標(biāo)簽
Hook::listen('app_begin');
// Session初始化
if(!IS_CLI){
session(C('SESSION_OPTIONS'));
}
// 記錄應(yīng)用初始化時(shí)間
G('initTime');
App::exec();
// 應(yīng)用結(jié)束標(biāo)簽
Hook::listen('app_end');
return ;
}
可以看出程序在App init之前 通過(guò)鉤子去監(jiān)聽(tīng)(查看)此動(dòng)作時(shí)是否有需要處理的。循環(huán)$tags['app_init']獲取類名并通過(guò)類名自動(dòng)執(zhí)行行為擴(kuò)展類run方法
所有鉤子如下:
'url_dispatch' ? ? // URL調(diào)度結(jié)束標(biāo)簽
'app_init' ? ? // 應(yīng)用初始化標(biāo)簽
'app_begin' ? ? // 應(yīng)用開(kāi)始標(biāo)簽
'app_end' ? ? // 應(yīng)用結(jié)束標(biāo)簽
'action_begin' ? ? // 動(dòng)作執(zhí)行前操作
'action_end' ? ? // 動(dòng)作執(zhí)行后操作
'ajax_return' ? ? // 用于擴(kuò)展其他返回格式數(shù)據(jù)
'path_info' ? ? ? // 檢測(cè)路由規(guī)則 如果沒(méi)有則按默認(rèn)規(guī)則調(diào)度URL
'template_filter' ? ?// 模版編譯過(guò)濾標(biāo)簽
'view_begin' ? ? ?// 視圖開(kāi)始標(biāo)簽
'view_end' ? ? ? // 視圖結(jié)束標(biāo)簽
'view_parse' ? ? ?// 視圖解析標(biāo)簽
'view_filter' ? ? ?// 內(nèi)容過(guò)濾標(biāo)簽
缺點(diǎn)如下:
1.順序不可控(配置文件沒(méi)有專門的參數(shù)去控制順序)如app_init同時(shí)有2個(gè)監(jiān)控時(shí)先調(diào)用哪個(gè)方法。
2.監(jiān)控不是全局監(jiān)控內(nèi)部寫的太死只有一些定義好的不能通過(guò)配置文件去自動(dòng)控制每一個(gè)操作的鉤子(可能是考慮到性能才沒(méi)有加)
優(yōu)點(diǎn)如下:
1.可以實(shí)現(xiàn)了好多行為擴(kuò)展
2.可以代理檢測(cè)、瀏覽器防刷新檢測(cè)、操作路由檢測(cè)等
總結(jié):
行為擴(kuò)展就是在 程序某個(gè)操作時(shí)去額外的去執(zhí)行某一特定功能。如程序在操作數(shù)據(jù)庫(kù) 讀的時(shí)候 通過(guò)explian獲取性能信息并監(jiān)測(cè)性能瓶頸 如出現(xiàn)獲取數(shù)據(jù)時(shí)超過(guò)特定秒數(shù) 就把相關(guān)信息email給項(xiàng)目經(jīng)理等。
web后端和前端是怎么連接的
web后端和前端是怎么連接的
WEB后端和WEB前端可以通過(guò) 前端模板引擎 與 后端模板引擎 進(jìn)行連接。
后端模板引擎: WEB前端開(kāi)發(fā)人員開(kāi)發(fā)好前端靜態(tài)頁(yè)面,然后交給WEB后端開(kāi)發(fā)人員,他們?cè)倮煤蠖艘婺0澹ū热纾篺reemarker)把前端頁(yè)面與后端數(shù)據(jù)進(jìn)行連接,形參一個(gè)動(dòng)態(tài)頁(yè)面。
前端模板引擎:
描述成前端模板引擎可能不太對(duì),但是比較好理解吧。當(dāng)前比較流行的Vue.js、Angular.js、React.js 等MVVM前端框架都自帶了前端模板引擎。
WEB前端人員與WEB后端人員一起協(xié)定好數(shù)據(jù)接口格式(請(qǐng)求地址、數(shù)據(jù)格式、數(shù)據(jù)字段等),然后WEB前端人員與WEB后端人員同時(shí)進(jìn)行項(xiàng)目的開(kāi)發(fā),WEB前端人員通過(guò)AJAX的方式從WEB后端獲取到前端頁(yè)面的相關(guān)JSON數(shù)據(jù),然后通過(guò)MVVM前端框架把JSON數(shù)據(jù)渲染到頁(yè)面里面,最終形成了一個(gè)動(dòng)態(tài)頁(yè)面。
網(wǎng)站數(shù)據(jù)處理主要分為三層。
第一,表示層,這部分可以用HTML代碼,CSS/Javascript代碼來(lái)實(shí)現(xiàn)等。通過(guò)前端代碼可以實(shí)現(xiàn)網(wǎng)頁(yè)的布局和設(shè)計(jì)。這層又可以稱為顯示層。也就是你用瀏覽器打開(kāi)能看到的網(wǎng)頁(yè)。
第二層,是業(yè)務(wù)層,這層是負(fù)責(zé)處理數(shù)據(jù)的。常用的代碼語(yǔ)言有PHP,JSP,Java等。通過(guò)這些后臺(tái)處理語(yǔ)言的算法來(lái)處理前臺(tái)傳回的數(shù)據(jù)。必要的時(shí)候進(jìn)行操作數(shù)據(jù)庫(kù),然后把結(jié)果返回給前端網(wǎng)頁(yè)。
第三層,是數(shù)據(jù)層,這個(gè)就是數(shù)據(jù)庫(kù),用來(lái)存儲(chǔ)數(shù)據(jù)的。通過(guò)業(yè)務(wù)層的操作可以實(shí)現(xiàn)增刪改數(shù)據(jù)庫(kù)的操作。
舉個(gè)例子就是這樣,比方說(shuō)你在網(wǎng)頁(yè)上填一個(gè)表格然后提交會(huì)有以下幾種數(shù)據(jù)傳輸經(jīng)過(guò):
①你接觸到的是這個(gè)網(wǎng)頁(yè)是屬于表示層,這個(gè)網(wǎng)頁(yè)一般由HTML標(biāo)簽結(jié)合CSS/JAVASCRIPT來(lái)實(shí)現(xiàn)的。 這時(shí)候你要先填入數(shù)據(jù)。
②然后你按提交觸發(fā)后臺(tái)處理機(jī)制,這時(shí)候數(shù)據(jù)會(huì)傳到后臺(tái)的代碼進(jìn)行處理。這部分代碼根據(jù)不同網(wǎng)站可以使PHP,JSP,JAVA等。 代碼根據(jù)程序員預(yù)設(shè)的算法將收到的數(shù)據(jù)進(jìn)行處理之后會(huì)相應(yīng)的對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,存儲(chǔ)數(shù)據(jù)等。
③成功操作完數(shù)據(jù)庫(kù)之后,業(yè)務(wù)層的代碼會(huì)再向表示層也就是顯示器端傳回一個(gè)指令通知你表格填寫成功。
這就是基本的網(wǎng)站數(shù)據(jù)交換邏輯了
后端會(huì)暴露出一個(gè)處理數(shù)據(jù)邏輯的接口(api),然后哦前端通過(guò)js像后端暴露的api發(fā)起請(qǐng)求過(guò)程可攜帶參數(shù),然后后端接到請(qǐng)求后會(huì)返回?cái)?shù)據(jù)給前端,前端拿到數(shù)據(jù)后會(huì)渲染在頁(yè)面上
治安監(jiān)控的前端是怎么連接的?
固定攝像機(jī)前端有和電源(220V轉(zhuǎn)12V)全方位像像機(jī)前端一根視頻線(和主機(jī)采集卡連接)一根電源線220V(連接解碼器)一根通訊線(連接主機(jī)上的碼轉(zhuǎn))
后端thinkphp和前端vue怎么協(xié)調(diào)
hinkphp作為服務(wù)端,為客戶端提供數(shù)據(jù)。而Vue是客戶端的一個(gè)JavaScript框架。便于我們對(duì)頁(yè)面進(jìn)行處理。
一般情況下,vue通過(guò)異步請(qǐng)求來(lái)獲取數(shù)據(jù)。由于實(shí)例化vue時(shí)已經(jīng)將相關(guān)的變量、模板等定義好了。
當(dāng)獲取到thinkphp回傳的數(shù)據(jù)后,將會(huì)自動(dòng)的把數(shù)據(jù)對(duì)應(yīng)的呈現(xiàn)在網(wǎng)頁(yè)上。
php在web開(kāi)發(fā)中技術(shù)含量排第三(jsp,.在前),但由于php簡(jiǎn)單,開(kāi)發(fā)周期短,運(yùn)行速度快,很快就成為中小型網(wǎng)站的首選技術(shù),像CMS全球超過(guò)70%都是php的.再說(shuō)大型網(wǎng)站現(xiàn)在也很少,所以,學(xué)習(xí)php找工作要容易得多,自己想接私單也容易拿下!
就是這樣的,我剛剛在后盾人知道的那邊有詳細(xì)的教學(xué)視頻.,可以給你學(xué)習(xí)
thinkphp作為服務(wù)端,為客戶端提供數(shù)據(jù)。而Vue是客戶端的一個(gè)JavaScript框架。便于我們對(duì)頁(yè)面進(jìn)行處理。
一般情況下,vue通過(guò)異步請(qǐng)求來(lái)獲取數(shù)據(jù)。由于實(shí)例化vue時(shí)已經(jīng)將相關(guān)的變量、模板等定義好了。
當(dāng)獲取到thinkphp回傳的數(shù)據(jù)后,將會(huì)自動(dòng)的把數(shù)據(jù)對(duì)應(yīng)的呈現(xiàn)在網(wǎng)頁(yè)上。 你看過(guò)后很簡(jiǎn)單吧以后不會(huì)可以向我一樣經(jīng)常到后盾人找找相關(guān)教材看看就會(huì)了,希望能幫到你,給個(gè)采納吧謝謝(? ???ω??? ?)
thinkphp 設(shè)計(jì)服務(wù)端,全restful api的規(guī)范就行設(shè)計(jì)(其實(shí)只要返回json或xml就可以),
vue-resouve只是一個(gè)請(qǐng)求庫(kù),和jquery 的 ajax 是大同小異的
CArray
用了的C++模板類。
CArray是個(gè)MFC提供的模板類,他實(shí)現(xiàn)一個(gè)數(shù)組,但是這個(gè)數(shù)組比C默認(rèn)提供的更好,可以動(dòng)態(tài)改變大小,不需要向C語(yǔ)言基本的數(shù)組那樣必須在定義的時(shí)候顯式指定數(shù)組大小。數(shù)組的類型有模板的參數(shù)給定,比如你的代碼里他產(chǎn)生了儲(chǔ)存CPoint對(duì)象的數(shù)組。
【前端面試:手寫js系列】flat---數(shù)組扁平化
數(shù)組扁平化定義:在前端項(xiàng)目開(kāi)發(fā)過(guò)程中,偶爾會(huì)出現(xiàn)層疊數(shù)據(jù)結(jié)構(gòu)的數(shù)組,需要把多層數(shù)組轉(zhuǎn)換為一級(jí)數(shù)組(即提取嵌套數(shù)組元素最終合并為一個(gè)數(shù)組),使其內(nèi)容合并并且展開(kāi)。
遍歷數(shù)組的方案:
for循環(huán)
for...of
for...in
forEach()
entries()
keys()
values()
reduce()
map()
判斷元素是否是數(shù)組的方案:
instanceof
constructor
object.prototype.toString.call
isArray
將數(shù)組元素進(jìn)行展開(kāi)一層的方案:
擴(kuò)展運(yùn)算法 + concat(concat() 方法用于合并兩個(gè)或多個(gè)數(shù)組,在拼接的過(guò)程中加上擴(kuò)展運(yùn)算符會(huì)展開(kāi)一層數(shù)組)
concat + apply(主要是利用 apply 在綁定作用域時(shí),傳入的第二個(gè)參數(shù)是一個(gè)數(shù)組或者類數(shù)組對(duì)象,其中的數(shù)組元素將作為單獨(dú)的參數(shù)傳給 func 函數(shù)。也就是在調(diào)用 apply 函數(shù)的過(guò)程中,會(huì)將傳入的數(shù)組一個(gè)一個(gè)的傳入到要執(zhí)行的函數(shù)中,也就是相當(dāng)對(duì)數(shù)組進(jìn)行了一層的展開(kāi)。)
toString + split(不推薦使用 toString + split 方法,因?yàn)椴僮髯址呛芪kU(xiǎn)的事情,如果數(shù)組中的元素所有都是數(shù)字的話,toString + split 是可行的,并且是一步搞定。)
最終手寫的flat()方法為:
參考博客如下,注明一下出處,感謝大神們,希望自己可以多多練習(xí),多多回顧:
三元博客
JS數(shù)組reduce()方法詳解及高級(jí)技巧
數(shù)組flat方法實(shí)現(xiàn)
前端模板引擎對(duì)于array的支持的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于前端模板引擎對(duì)于array的支持、前端模板引擎對(duì)于array的支持的信息別忘了在本站進(jìn)行查找喔。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。