同學叫我一起創業,我不聽,他現在月入10萬,我羡慕死了,我已悟到了成功的秘訣!_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

  先說說的親身經歷及見證吧,2017年一個晚上跟同學一起吃飯,聊起了創業的事情,因為我們的年齡都比較很大了,遲早有一天退出職場,就討論做什麼好,同學就說要不我們運營微信公眾號吧,我當時想,這個東西能養活自己嗎?他說可以掙大錢,我當時一點都不信,公眾號不是就推送兩篇文章,這東西有收入?我當時一點都沒有看好這個,並且,在2017年,感覺已經過了紅利期,而且從開始到有收入這段時間具體要多久完全沒有把握,不知道哪一天能看到盈利,所以我一點都沒看好這個,還是找份工作老老實實上班,每月穩定拿工資。就這樣,我們各自的想法不一樣,他運營他的公眾號,我上我的班。

  最初,他想通過公眾號將他的網絡產品綁定一起,然後通過網絡培訓盈利,剛剛開始,他也拉到一些學生,但是培訓需要花費大量的時間去做課件,每個學員教的學費不多,所以很難維持下去,收入遠遠沒有自己上班收入高,有點渺茫,一度想重返職場,最終還是沒有,因為他很相信公眾號能掙錢,而且能掙大錢,後來,把精力、時間放在吸粉。

  每天自己寫文章,經過一段時間,大概一個月左右,自己的庫存也用完了,想不出什麼內容來寫了,也沒有一分錢的收入,後來變成每天找文章然後自己加工處理,改標題,改內容,想盡了各種方法,互推、誘導關注、海報引流、建大量的微信群、欺騙用戶分享朋友圈、搞各種活動等等,大半年的時間就這樣過去,當然粉絲也有,但是不多,這個時候,偶爾會有人來找上門投廣告,一個月勉強有1000塊左右的收入,雖然不多,但是讓他看到希望,更加堅定了他的信心,到了此時此刻,我仍然不看好這個,因為收入太少了,1000塊還比不起我上班工資。我同學心態好,對公眾號的前景持樂觀的態度,所以,繼續堅持,每天摸索這什麼時間段推送文章閱讀量比較多,什麼樣的文章內容比較吸引讀者,還有標題黨等等的研究。

  經過一段時間的摸索和堅持,終於積累了比較多的粉絲,這時,他又註冊另外一個公眾號,然後以大號養小號,兩個號同時運營着,每天還是重複着之前的工作,到處找文章,修改內容,優化標題,準時準點發布文章,慢慢地小號的粉絲也在漲,就這樣,兩年的時間過去了,收入也有所增加,後來,又收購了幾個公眾號,此時他手上已經有6個公眾號,每天還是重複着同樣的工作,各個號的粉絲都在增長,這個時候,他的收入已經基本更之前上班的工資持平。去年,他的平均每個月收入達到了6W。到現在,他的號粉絲不斷增長,收入有時候超過10W每個月,遠遠超過打工的收入,尤其在這個疫情期間,很多人都失去了工作,而他做得風生水起。每個人對成功的定義不一樣,在我看來,他已經達到他預期的期望,算是成功。

有些人天生就具備成功的特性,我同學最起碼具備以下特性:樂觀、超常的執行力、重視細節、善於總結問題,此刻我悟到,一個人想要成功真不難,只要做好以下幾點就好。

1、定位

定位很重要,在做一件事之前首先要看準方向,才能充分發揮自己的優勢達到所想去的目的地;相反,如果方向走錯了,那麼離自己當初所想的方向便越走越遠。

那如何去定位,如何確定方向是準的呢,這個很重要,我覺得,首先要回顧這近些年來的發展時間軸,一個個列出來,結合當前的熱門行業,去判斷未來的走勢。雷軍的名言:站在風口上,豬都可以飛起來。看看我們這些年有哪些風口:團購、自媒體、大數據、o2o、直播、共享經濟、短視頻,在這些風口中,有些紅利期已經過了,有些還處於下滑狀態,有些正在處於紅利期。只要我們善於總結過去的經歷,觀察當前的發展形勢,可以大概推斷未來的趨勢,就這樣定位。

2、樂觀的精神

能堅持做完一件事,這過程中不能缺少樂觀的精神,這是一種精神支柱,只有這樣才能使你有動力繼續走下去,很多人都是開始充滿了信心,然後實際開展的過程與最初的想法相差甚遠,經常受到挫折、打擊,然後慢慢就對最初的想法懷疑,最後失去了信心,很快就打退堂鼓,這是在創業路上很關鍵的因素。

3、少抱怨,多檢查問題

有些人在創業的過程中,一旦遇到問題,就抱怨別人抱怨命運,抱怨條件不好,但是從來就沒有認真去檢查自己的問題,為什麼會出這樣的問題,究竟是什麼原因導致的。例如,我同學經常發推文,有時有些文章閱讀量很低有些很高,有時掉粉,但是他從來不會抱怨自己做不好,而是認真去分析,查找問題的原因。同一個時間段為什麼有些文章的閱讀量會少那麼多,為什麼會太令粉絲反感而取消關注。

4、超常的執行力

執行力非常重要,這是貫穿整個創業的始終,如果沒有了執行力,就談不上創業了。馬雲說過:成功的人都具備有超越常人的堅持。我同學也經常說,做事要像一頭牛一樣,不怕苦不怕累,堅持下去,這樣總會有結果,事實證明,他是對的。曾經有人說,即使是一隻小蚊子,死咬着一個地方吸血,最終也能吸到血,說明執行力在創業過程有多麼的重要。要做好執行力,我覺得要做好這幾點:把握時間、按質量、超越常人的堅持去對待一件事。

4.1、把握時間

按時: 這個很重要,例如,你計劃開發一個項目,然後定好了預計完成時間,然後量化了每個任務,如果你沒有按時去完成任務,那整個項目最後就無法預期完成,這個不管是做客戶項目還是做自己的項目都增加了時間成本。

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

時間點: 同樣,拿我同學運營公眾號來說,把握時間點非常重要,因為很多用戶習慣在某個時間段看你的公眾號,如果你毫無規律,不按時間發布,很多用戶會錯過閱讀,影響文章的閱讀量,然後用戶就會慢慢對您的公眾號反感,甚至取消關注。

4.2、按質量

同樣,做每一件事或者作品,都要以高質量完成,這樣才能保證你的作品競爭力,留住用戶。 這個十分關鍵,就拿公眾號來說,如果只是為了完成任務,隨隨便便抄襲一下劣質的文章來敷衍,那很多用戶很快就對你的文章不感興趣,長期下去,用戶就不在關注你的公眾號了,甚至取消關注。就拿抖音來說,為什麼抖音一旦刷起來就停不下來了,這是為什麼呢?因為抖音在作品審核是十分嚴格,只有高質量的做才會給流量,低質量的幾乎不給流量,這就是我們每次刷抖音都停不下來的原因。

超越常人的堅持

很多創業者失敗,原因就是沒有堅持下去,當然也有很多因為,例如,資金方面,讓他們無法堅持下去,但是我覺得這個不是主要原因。一個好的項目從來就不缺資金,缺的是堅持,很多創業者三天打魚两天曬網,越做越差,越差越不想做下去,惡性循環,最終堅持不下去而失敗,重返職場。我同學剛剛開始兩年,幾乎是沒有收入的,但是他還是一直堅持下去,在今天看來,我真得很佩服他,每天花大量時間去整理文章,想盡各種方法,兩年如一日,從不間斷,也只有這樣,堅持每天輸出優質的文章,才能黏住用戶。有時候,經常羡慕別人的收入比自己高,但是忽略了別人背後付出的辛勤和汗水,超出常人的堅持,才換來了今天的成果。

5、注意細節

常言道:細節決定成敗。 這句話不是隨隨便便說說,我是深有體會,也是見證者。就說我同學,每發一篇文章,都注意各方面的細節,例如:標題、封面圖片、發布時間點、內容質量、內容類型等等。

標題: 這是提高點擊率的重要手段,大家聽說過標題黨吧,一個好的標題,閱讀量比起沒有吸引力的標題要高出一倍,這對於拉廣告十分重要。

封面圖片: 有些人隨隨便便用一張圖片就算了,甚至每一期的文章都是用同樣一張封面圖片,這對於用戶一點吸引力都沒有,視覺上沒有衝擊力,不能第一時間抓住用戶。

發布時間點: 也是非常重要,長期摸索,知道用戶大概在晚上10點左右,點擊率最高的時間點,可能用戶在這個時間點才忙完一天的工作,洗完澡,躺在床上玩手機。如果隨便找一個時間點發布,很快就被其他公眾號文章淹沒或者用戶根本就沒有時間看。

內容質量: 寧為玉碎不為瓦全,質量上,一定要把控好,如果你今天沒有找到好文,寧願不發布,都不要發一些劣質的文章,如果長期發布劣質的文章,這會影響用戶對你的文章興趣度。

內容類型: 不要找一下枯燥無味的文章,或者很費腦力的文章,最好選擇一些能引起大多數用戶共鳴的心靈雞湯文章,或者其他熱點文章。

種種細節,決定着產品或者運營的成敗。

6、最後

說了那麼多,如果你真的體會到這些含義,我想成功真的不難,而我本人體會最深的就這幾點:樂觀的精神、超越常人的執行力、注意細節。而且我現在正在執行中,快達到我的預期目標,希望看到我的文章的朋友,能真正體會到其中的含義。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

這款10萬起,實力不輸高爾夫、福克斯的車究竟怎樣?_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

車主二購買車型:2014款 1。4T 自動舒適版裸車價:10。48萬元滿意的地方:估計大多數買致悅的人都是衝著外觀去的,修長又不是寬厚,濃濃的轎跑風格。內飾的設計很人性化,主控偏向柱主駕駛位,大面積都是皮質包裹。橫向和縱向空間在A級車裡面可是說是佼佼者。

菲亞特這個品牌,一直都不太受到人的關注,但其實車型還算不錯,雖然和現在主流車型相比,還是有一些差距,但是作為一輛代步工具,還是不錯的選擇,例如,致悅,整體的實力相比同價位還是有的一拼的,至於使用情況如何,直接看車主怎麼說。

廣汽菲克菲亞特-致悅

指導價:10.08-14.88萬

車身尺寸

長*寬*高:4545*1850*1475mm

軸距:2708mm

動力匹配

1.4T 120馬力 L4 + 5擋手動

1.4T 150馬力 L4 + 7擋雙離合

車主一

購買車型:2014款 1.4T 自動運動版

裸車價:11.50萬元

滿意的地方:外觀很有范,在菲亞特的車型算是比較動感,再過兩年,也不會過時。內飾的細節做得很到位,紅色縫線的運動做魚,非常運動,有小小的豪華感。空間還算寬敞,縱向橫向都比較足夠。致悅的底盤很紮實,轉向較為精準,低速的時候方向盤很輕,

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

高速就會很變重,調校的很合理。

不滿意的地方:車內頭部的空間因為造型問題,較窄,低速的時候頓挫感比較強,油耗不算低。

車主二

購買車型:2014款 1.4T 自動舒適版

裸車價:10.48萬元

滿意的地方:估計大多數買致悅的人都是衝著外觀去的,修長又不是寬厚,濃濃的轎跑風格。內飾的設計很人性化,主控偏向柱主駕駛位,大面積都是皮質包裹。橫向和縱向空間在A級車裡面可是說是佼佼者。轉向算是蠻精準的,動力很足夠,方向盤很輕,總體來說還是比較操控的一輛車。

不滿意的地方:剎車的線性不好,低速有頓挫感,油耗偏高。

總結:作為一款10萬起的兩廂車而言,在顏值上絕對不輸個任何同級別的車型,無論是兩廂還是三廂。意大利人造車在用料和精緻有一定的強項,致悅的內飾細節可以體現這一點,雖然造型上有些特別,但還算能接受。空間算寬敞,只是造型問題導致頭部空間有些狹小。配置除了低配車型,其餘車型還算豐富,性價比不錯。動力上建議選擇150馬力的版本,雖然120馬力平日還算使用,但是150馬力的車型,會讓你超車更有信心。總體來說,在這個價位上,致悅的競爭力不輸其他車型。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

傳微軟正在開發基於網頁的新 Outlook 應用,代號「Monarch」_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

微軟的電子郵件應用 Outlook 歷史悠久,也是許多人工作上都必用、愛用的應用軟體。據國外媒體報導,目前微軟正在為 Windows 和 MacOS 開發一個通用的 Outlook 應用,代號為「Monarch」,且未來還可能將取代 Windows 10 中的預設郵件和行事曆應用。

傳微軟正在開發基於網頁的新 Outlook 應用,代號「Monarch」

現行使用中的 Outlook 有多種版本,包含 Outlook Web、Outlook (Win32)、Mac Outlook 以及 Windows 10 ,Monarch 可以算是微軟希望達到的最終目標,建構一個跨越 Windows、MacOS 與網頁之間涇渭分明的界線。微軟希望能利用網頁技術架構的應用程式來取代現有的各平台獨立客戶端應用,將各平台統一起來,無論使用者是免費版 Outlook 用戶或商業版用戶,都能夠加以使用,且在系統中所佔的空間也會更小。

據 Windows Central 的消息指出,該應用程式將會與本機作業系統整合起來,可支援離線儲存、共用目標、通知等,讓新應用盡可能感覺像是在本機上使用,同時還保留有通用跨平台的基礎。如果你想親身體會在網頁上使用 Outlook 的感覺,現在就可以在網路瀏覽器上感受一下,雖然並不會讓你完整體驗整個 Monarch 的功能(屆時會更豐富),但確實能讓你感受一下在網頁上使用的效果。

Monarch 預計會在今年年底開放預覽測試,並計畫於 2022 年某個時候取代 Windows 10 上的郵件和行事曆應用程式,而且也希望能夠取代傳統的 Win32 Outlook 客戶端,但要完成這個遠得要命的目標需要漸進式的過程,畢竟想要改變用戶習慣絕非一朝一夕可成。

◎資料來源:Windows Central 

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

 

 

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

HTC Desire 21 Pro 5G 實機諜照流出!配備 4800 萬像素四鏡頭主相機、支持雙卡雙待_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

繼去年 HTC U20 5G 之後,也在下半年在台灣推出 HTC Desire 20+ 。在 2021 年初,又傳聞 HTC 即將推出新手機?最近在網路上流傳一組疑似為 HTC Desire 21 Pro 5G 的實機諜照,雖然目前還無法確認其詳細規格,不過從中仍可得知這款未發表的新機配備 4800 萬像素四鏡頭主相機並支持雙卡雙待。

HTC Desire 21 Pro 5G 實機諜照流出!配備 4800 萬像素四鏡頭主相機、支持雙卡雙待

去年底,在中國美篇有人上傳了一系列聲稱是 HTC Desire 21 Pro 5G 的實機諜照,雖然目前原文已經修改隱私權限無法查看,不過稍早也有人將這組照片上傳到 Slashleaks 爆料,也讓 Desire 21 Pro 5G 的實機外觀被更多人看到。
雖然這組 Desire 21 Pro 5G 的外觀照片已經包上一層碳纖紋紋路的包膜,不過在機身背面仍可看到 HTC 的 Logo 以及相機外觀。圖中的 HTC Desire 21 Pro 5G  配備 4800 萬像素四鏡頭主相機,相機旁也有 LED 閃光燈:

從另一張機身正面見到 Desire 21 Pro 5G 採用居中的挖孔全螢幕設計,其型號為 2QAG100 。從關於手機的其他資訊,也能得知這款新機具備雙 SIM 卡插槽支持雙卡雙待、運行 Android 10 作業系統。另外,傳聞 Desire 21 Pro 5G 在機身側邊左側的電源鍵整合側邊指紋感應器,在機身頂部未見到 3.5mm 耳機孔。

回顧 HTC 去年推出第一款手機 U20 5G 搭載高通 Snapdragon 765G 處理器,隨後也針對中階入門手機市場推出 Desire 21+ 4G 手機。單從目前 HTC Desire 系列的產品定位來看,能預期這款 Desire 21 Pro 5G 也機上定位為中階機種。
即便目前仍無法確定它會搭載高通還是聯發科的 5G 處理器,但能大致推測它的價格不會太高,對於有想入手平價 5G 手機的消費者在之後也將多一款選擇。

圖片來源:Slashleaks

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

延伸閱讀:
小米 10i 5G 印度發表:搭載高通 750G 5G 處理器、1.08 億像素主相機、 120Hz更新率螢幕與 4820mAh 大電量

疑似 OPPO Find X3 安兔兔跑分曝光,搭載高通 S888 旗艦處理器測出 77.1 萬分刷新最高分紀錄

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

【asp.net core 系列】2 控制器與路由的恩怨情仇_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

0. 前言

在上一篇文章中,我們初步介紹了asp.net core,以及如何創建一個mvc項目。從這一篇開始,我將為大家展示asp.net core 的各種內容,並且嘗試帶領大家來挖掘其中的內在邏輯。

當然,那是以後的事情。這一篇將通過自定義一個控制器來為大家介紹asp.net core mvc 中控制器和路由的相關知識。

1. 控制器

先在Controllers目錄下添加一個類,名叫:

public class DemoController
{
    public string Index()
    {
        return "你好";
    }
}

訪問地址:

http://localhost:5006/demo/index

如果不出意外的話,你應該能看到網頁上的“你好”兩個字。

再新建一個類:

using Microsoft.AspNetCore.Mvc;
public class NoContrl : Controller
{
    public IActionResult Index()
    {
        return Content("Test");
    }
}

結合兩個不常規的控制器類,讓我們初窺asp.net core MVC是如何識別控制器的。這正是我之前說的,約定優於配置最好的體現。這個哲學最早也是為MVC提出來的,後來被.net framework引申到各個方面。

asp.net core mvc識別控制器,會在項目中發現 以Controller結尾的公開類或者繼承自Controller的公開類,並將這些類標記為控制器。當接到用戶或者界面轉交的請求時,程序從請求路徑中解析出控制器名稱,然後尋找 <控制器>Controller 或者 <控制器> : Controller 的類。

在默認情況下,一個訪問URL會在程序中解析成如下格式:

http://<HOST>:<PORT>/<Controller>/<Action>[其他參數]

在上文中,我們知道了控制器的解析規則,那麼現在看一下Action的解析規則:

在DemoController中添加如下方法:

public int TestInt()
{
    return 10;
}

public object TestObject()
{
    return new
    {
        Name = "TestObject",
        Age = 1
    };
}

public string TestPublic()
{
    return "成功訪問 TestPublic";
}

    protected string TestProtect()
{
    return "成功訪問 TestProtect";
}

private string TestPrivate()
{
    return "成功訪問 TestPrivate";
}

重新啟動,后依次訪問如下地址:

http://localhost:5006/Demo/TestInt
http://localhost:5006/Demo/TestObject
http://localhost:5006/Demo/TestPublic
http://localhost:5006/Demo/TestProtect
http://localhost:5006/Demo/TestPrivate

然後可以看到,TestInt、TestObject以及TestPublic均能正常訪問,但TestProtect和TestPrivate都提示找不到網頁或無法訪問。

可以看到,對於程序而言,Action就是控制器類里的公開類方法,與方法的返回值無關。也就是說,程序會找到 XXXController 或者名為XXX但繼承了Controller的類作為XXX的控制器,然後繼續在這個類里尋找到Action,如果沒有找到就會返回404的請求。

2. 路由

在第一節中,我們介紹了一下asp.net core mvc如何尋找控制器和Action,那這一節將介紹程序如何從請求鏈接中解析出控制器和Action的名稱,也就是路由映射。

路由(Routing)負責匹配傳入的HTTP請求,然後將這些請求發送給應用的可執行終結點。終結點是應用的可執行請求處理代碼單元,也就是我們控制器里的方法(Action)。

2.1 路由的配置

對於所有的asp.net core模板都包括生成在代碼中的路由。通常,我們要求路由在Startup.Configure方法中進行配置。

注意,Startup類里有且只有一個Configure方法,不能出現其重載版本。

該方法的聲明一般情況如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env);

如果想要設置路由,需要先註明項目啟用路由:

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

app.UseRouting();

然後使用如下方法配置路由:

app.UseEndpoints(endpoints =>
{
    // 配置路由
});

通常對於mvc項目而言,我們一般使用如下方式配置路由:

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

這行代碼的意思是:創建一個名字為 default 的映射控制器的路由,映射規則為 {controller}/{action}/{id?},也就是第一個為控制器,第二個為Action,第三個是ID,其中ID可以不存在,當Action無法從請求地址中解析出來時默認為Index,控制器默認為Home。

通過這個解析,我們可以得知 我們之前訪問的

http://localhost:5000/

是哪個控制器里的什麼方法來處理了——HomeController.Index。

那麼我們修改一下HomeController.Index來驗證一下,我們理解是否有誤:

public IActionResult Index()
{
    return View();
}
//  修改為
public IActionResult Index()
{
    return Content("測試");
}

重新運行程序,訪問

http://localhost:5000/

然後看到頁面出現:測試字樣,可以看到路由系統自動為我們補全了控制器名和action名。如果方法中出現參數,則自動按照參數名1=值1&參數名2=值2這種形式查看參數。Id為特殊的,會自動按照目錄其映射。所以:

http://localhost:5000/控制器1/方法1/id值
http://localhost:5000/控制器1/方法1?id=id值

是一個請求鏈接。

2.2 添加路由配置

那麼,我們回過頭來看一下聲明路由的方法:

public static ControllerActionEndpointConventionBuilder MapControllerRoute(this IEndpointRouteBuilder endpoints, string name, string pattern, object defaults = null, object constraints = null, object dataTokens = null);

默認情況下,我們不會設置 defaults、constraints、dataTokens,這三個參數都有含義,這裏不對后兩個做介紹,簡單介紹一下第一個:

在路由配置的方法里,添加以下內容:

endpoints.MapControllerRoute(
                    name : "test",
                    pattern: "DemoTest/{action=Index}/{id?}",
                    defaults : new 
                    {
                        Controller = "Demo",

                    });

至此,我們沒有創建名為DemoTest的控制器,但是我們在訪問:

http://localhost:5006/DemoTest

仍然能得到響應,而且控制器被解析為Demo。

這就是defaults的意義,路由在解析的時候,系統會把defaults中的值自動填充到路由連接中沒有設置的值里。

當我們設置多個路由的時候,路由系統會優先嘗試匹配最容易解析的配置。比如說,當我們訪問:

http://localhost:5000/DemoTest/

的時候,路由系統會優先從名為test的配置表中解析,只有當無法從這裏找到時才會從其他路由中解析。

3. 總結

這一篇我們簡單介紹了控制器與路由映射,可以訪問我們自己添加的路由。在開發中,通常情況下,創建的控制器都是以Controller結尾並繼承Controller類。這是因為Controller類有很多有用的屬性和方法供我們使用,以Controller結尾是為了統一規則,可以讓我們一眼看出哪些是控制器。

更多內容煩請關注我的博客《高先生小屋》

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

我只不過想買個車 為什麼給人家看羞羞的圖…_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

—完結—下一期再與你們一起調侃汽車廣告的幽默如果有什麼關於汽車有趣的事情歡迎在下面留言評論。

—完結—

下一期再與你們一起調侃汽車廣告的幽默

如果有什麼關於汽車有趣的事情歡迎在下面留言評論本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

LG印度廠毒氣外洩致死案 韓籍執行長等12人被捕_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

摘錄自2020年7月8日中央社報導

韓國樂金聚合物公司(LG Polymers)設在印度的一家化工廠兩個月前化學氣體外洩,造成12人死亡。事發所在地警察局長今(8日)說,警方已逮捕這家工廠12名幹部,包括韓籍執行長。

事發工廠位於印度港市維沙哈巴南(Visakhapatnam),當地警察局長米納(Rajiv Kumar Meena)說,逮捕行動是依據5月事故發生時針對樂金聚合物母公司樂金化學(LG Chem)所成立的刑事殺人案。

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

樂金聚合物化工廠的有毒苯乙烯(styrene)氣體5月7日凌晨外洩,造成許多還在睡夢中的人們窒息。韓國樂金化學尚未回應媒體的採訪電郵。

公害污染
污染治理
國際新聞
印度
有毒氣體外洩

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

使用VUE開發用戶後台時的動態路由問題、按鈕權限問題以及其他頁面處理問題_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

如今前後端分離是大勢所趨,筆者雖然是做後台的,但也不得不學學前端的流行框架VUE -_-||| 。

為了學習VUE,筆者搭建了一個簡單的用戶後台,以此來了解VUE的開發思路(注:本項目不用於實際開發,只是為了學習,本文重點在於vue的動態路由添加,動態權限以及頁面處理的一些小問題)。

一、項目組成

  VUE 2.6.11 + axios +VueX + ElementUI 2.13.2 

二、整體思路

  1.  用戶登錄后,獲取菜單數據,用以显示菜單。

  2.  用戶登錄后,後台獲取Vue路由數據,用以動態添加到VueRouter中。

  3.  用戶登錄后,從後台獲取用戶的權限,用以控制用戶是否對某一功能具有可操作權限。

三、具體實現

·   1.  登錄。由於本人學習重點是使用VUE動態添加路由、菜單显示和權限控制,所以登錄頁面沒有做具體功能,點擊登錄按鈕就表示登錄成功了。

      由於登錄頁是用戶的第一界面,不存在任何權限問題,所以筆者就直接將登錄頁的路由直接寫在了VueRouter實例中。如下:

   

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [{
  path: '/Login',
  name: 'Login',
  component: () => import('../views/Login.vue')
}]

export function initRouter() {
  return new VueRouter({
    routes
  })
}

export default initRouter()

  用戶通過 http://localhost:8080/#/login 可訪問到登陸頁面:

 

 

       點擊登錄按鈕表示登錄成功!

  登錄成功后的處理:

  (1)向後台發請求拿到路由數據並存入VueX的state中,並通過addRoutes(routerObjArr)動態添加到路由實例中注:後台返回的數據結構需跟route相一致,如圖:

  前端所需數據結構:

  

  後台返回的數據結構:

  

 

 

 

 

 

   細節處理:由於後台返回的component字段是個組件地址字符串,這就需要將後台返回的route數據 一 一 做處理,通過import() 方法動態的加載組件,然後將返回的compoent對象重新賦值到component字段上。如圖:

  

 

  代碼:

  

const _import = require('@/router/_import_' + process.env.NODE_ENV) //獲取組件的方法
/**將router的json字符串中的component轉換為組件對象 */
export function filterAsyncRouter(asyncRouterMap) {
  if (!asyncRouterMap) return [];

  function _iter(before) {
    const after = Object.assign({}, before)
    if (after.component) {
      after.component = _import(after.component);
    }
    if (after.children && after.children.length) {
      after.children = filterAsyncRouter(after.children);
    }
    return after
  }

  return asyncRouterMap.map(_iter)

}

 

 

   圖中所用的import方法,根據生產環境不同,引用不同的文件,如圖:

  

 

 

   各自的代碼如下:

  _import_development.js:

module.exports = file => require('@/views/' + file + '.vue').default // vue-loader at least v13.0.0+

  _import_production.js

module.exports = file => () => import('@/views/' + file + '.vue')

  將後台的返回的路由數據處理完成后,最後就可以使用addRoutes方法動態加入VueRouter中了。此時,用戶便可以按照路由訪問頁面了。代碼如下:

//動態生成路由
      axios
        .get("https://localhost:5001/AdminApi/Home/GetMenuJson?userid=" + 1)
        .then(res => {
          //取出路由列表 (isRoute=1)
          res.data.obj.router[0].children = res.data.obj.router[0].children.filter(
            a => a.meta.isRoute == 1 //isRoute=1的
          );

          //存入緩存
          this.$store.commit("setRoutes", res.data.obj.router);

          //轉換組件對象
          var getRouter = filterAsyncRouter(res.data.obj.router);

          //打印當前路由列表
          console.log("當前路由列表:", res.data.obj.router[0].children);

          //清空之前的路由信息
          this.$router.matcher = initRouter().matcher;

          //重新添加路由信息
          this.$router.addRoutes(getRouter);

          //跳轉到 Layout 組件
          this.$router.push("/");
        });

 

  (2)向後台發請求拿到權限數據,並存入VueX的state中。代碼如下:

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

     axios
        .get(
          "https://localhost:5001/AdminApi/Access/ActionPermission?userid=" + 1
        )
        .then(res => {
          //存入權限
          console.log("權限列表:", res.data.obj);
          this.$store.commit("setAccess", res.data.obj);
        });

  (3)向後台請求數據並存入VueX中的state之前,需要清空上一次存入的數據(包括路由數據和權限數據),否則會造成數據混亂,如圖:   

        

  (4)addRoutes之前,不僅要做component字段的字符串轉對象的處理,還要清掉上一個用戶登錄后存入router中的路由數據,否則會造成數據混亂或者vue警告重複的路由名稱。

  

 

 

   Login.vue組件中的全部代碼如下:

<template>
  <div class="about">
    <button @click="login">登錄</button>
  </div>
</template>

<script> import { filterAsyncRouter } from "../common/promission"; import axios from "axios"; import { initRouter } from "@/router"; export default { created() { this.$store.commit("logout"); }, methods: { login() { //動態生成路由
 axios .get("https://localhost:5001/AdminApi/Home/GetMenuJson?userid=" + 1) .then(res => { //取出路由列表 (isRoute=1)
 res.data.obj.router[0].children = res.data.obj.router[0].children.filter( a => a.meta.isRoute == 1 //isRoute=1的
 ); //存入緩存
          this.$store.commit("setRoutes", res.data.obj.router); //轉換組件對象
          var getRouter = filterAsyncRouter(res.data.obj.router); //打印當前路由列表
 console.log("當前路由列表:", res.data.obj.router[0].children); //清空之前的路由信息
          this.$router.matcher = initRouter().matcher; //重新添加路由信息
          this.$router.addRoutes(getRouter); //跳轉到 Layout 組件
          this.$router.push("/"); }); axios .get( "https://localhost:5001/AdminApi/Access/ActionPermission?userid=" + 1 ) .then(res => { //存入權限
 console.log("權限列表:", res.data.obj); this.$store.commit("setAccess", res.data.obj); }); } } }; </script>

  promiss.js代碼如下:

const _import = require('@/router/_import_' + process.env.NODE_ENV) //獲取組件的方法
/**將router的json字符串中的component轉換為組件對象 */
export function filterAsyncRouter(asyncRouterMap) {
  if (!asyncRouterMap) return [];

  function _iter(before) {
    const after = Object.assign({}, before)
    if (after.component) {
      after.component = _import(after.component);
    }
    if (after.children && after.children.length) {
      after.children = filterAsyncRouter(after.children);
    }
    return after
  }

  return asyncRouterMap.map(_iter)

}

  store.js代碼如下:

import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    routes: [],
  },
  mutations: {
    setRoutes: (state, routes) => {
      state.routes = routes
    },
    setAccess: (state, access) => {
      state.access = access;
    },
    logout: (state) => {
      state.routes = [];
      state.access = []
    }
  },
  actions: {},
  modules: {},
  plugins: [new VuexPersistence().plugin]
})

 

  2. 菜單。將Layout組件用作菜显示組件,將ele中的菜單組件複製到該組件中,並通過向後台請求數據,拿到菜單和菜單對應的分組數據 。拿到菜單和菜單分組數據后,循環遍歷,將菜單按照對應的分組全部显示(後台判斷當前用戶可显示的菜單,沒有權限的菜單直接不返給前台)。vue代碼以及後台數據如下:

  

<template>
  <el-container>
    <el-header>
      <el-dropdown>
        <i class="el-icon-setting"></i>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item>修改密碼</el-dropdown-item>
          <el-dropdown-item>退出</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      <span>王小虎</span>
    </el-header>
    <el-container>
      <el-aside width="250px">
        <el-menu @select="handleSelect">
          <el-submenu :index="group.name" v-for="group in groupList" :key="group.id">
            <template slot="title">
              <i class="el-icon-message"></i> {{group.title}} </template>
            <template v-for="router in routerList">
              <el-menu-item :index="router.path" :key="router.meta.id" v-if="router.meta.groupId == group.id"
              >{{router.meta.title}}</el-menu-item>
            </template>
          </el-submenu>
        </el-menu>
      </el-aside>
      <el-main>
        <router-view />
      </el-main>
    </el-container>
  </el-container>
</template>

<script> import axios from "axios"; export default { data() { return { activeIndex: "/home/Index", groupList: [], routerList: [] }; }, mounted() { this.getGroupList(); this.getRouterList(); }, methods: { //菜單點擊事件
 handleSelect(key) { this.$router.push(key); }, //獲取菜單分組數據
 getGroupList() { var that = this; axios .get("https://localhost:5001/AdminApi/Home/GetGroupJson") .then(res => { that.groupList = res.data.obj; }); }, //獲取菜單數據
 getRouterList() { var that = this; axios .get("https://localhost:5001/AdminApi/Home/GetMenuJson") .then(res => { that.routerList = res.data.obj.router[0].children.filter( a => a.meta.display == 1 //取display=1的
 ); console.log("當前菜單列表"); console.log(that.routerList); }); } } }; </script>

<style> @import "../styles/layout.css"; /*引入公共樣式*/
</style>

後台分組數據:

{
"id": 14,
"name": "Customer",
"title": "客戶中心",
"target": "mainRigh",
"url": "#",
"icoCss": "layui-icon-username",
"delFlag": 0,
"sortNo": 0,
"createMan": 1,
"createTime": "2019-05-05T11:30:06"
},
{
"id": 9,
"name": "System",
"title": "系統設置",
"target": "123",
"url": "#",
"icoCss": "fa-gears",
"delFlag": 0,
"sortNo": 1,
"createMan": 1,
"createTime": "2019-05-05T11:29:56"
}

後台菜單數據:

 

 

效果圖:

  3.  功能頁面的處理。

    (1)組件的動態加載規則由於該vue項目中的組件是動態加載,那麼後台返回的路由數據中的component字段中的路徑自然也要按照某一種規則來返給前端。否則會造成import()組件的時候,由於地址不對解析加載不到組件而報錯。

   例如筆者是按照這種規則:

       後台數據

 

 

 斜杠”/“前邊表示文件夾名稱,後邊表示組件名稱,這樣就可以按照這種規則動態加載到組件了。

 

 

 

 (2).頁面刷新變成空白頁?(路由丟失)

  遇到這個問題的話,在main.js中加入一段代碼,每次刷新頁面都把存入VueX state中的數據拿出來,判斷一下路由裡邊還存不存在當前刷新頁面的路由,如果沒有,則對VueRouters重新賦值

  main.js 代碼如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import store from './common/store'
import {
  filterAsyncRouter
} from "./common/promission";

Vue.config.productionTip = false
Vue.use(ElementUI);

new Vue({
  router,
  store,
  render: h => h(App),
  mounted() {
    // 緩存的路由信息
    const routes = this.$store.state.routes
    // 判斷當前路由是否被清除
    const hasRoute = this.$router.options.routes.some(r => r.name == 'index')
    // 如果 緩存中有路由信息 並且 當前路由被清除
    if (routes.length && !hasRoute) {
      //獲取路由Json字符串
      var getRouter = filterAsyncRouter(routes);
      // 再次添加路由信息
      this.$router.addRoutes(getRouter);
      // 然後強制更新當前組件
      this.$forceUpdate()
    }
  },
}).$mount('#app')

  (3)  頁面按鈕的控制

  將前面存入vuex state中的權限數據,在每個組件中都拿出來一下存入一個變量中,在按鈕上使用v-if、array.indexOf(‘權限名稱’)來控制显示/隱藏。

  原理是如果用戶存在該權限,則v-if=”true“,按鈕則显示,否則按鈕隱藏。

  代碼如下:

<el-button @click="edit(scope.row)" type="text" size="small" v-if="accessList.indexOf('SysRole/AddEdit')>-1"
        >編輯</el-button>

  

 

 效果圖:

 

好了,筆者就介紹到這裏。當然,如果要做一個完整的後台,肯定還有很多要做的東西,比如用戶角色啊、角色授權啊等等;但筆者這次學習的重點是VUE的動態路由、動態權限,以及頁面處理中一些比較常見的坑,所以別的就不多介紹了。

如有需要,朋友們可以聯繫我,大家多多交流。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

買了必後悔 美國佬權威機構說這10輛車最不可靠!_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

它標配的是一款383馬力的5。7L V8 發動機,當然你可以選擇動力更強的6。7L V8發動機,只是油耗會變得非常的高。而在舒適性上就不用想象能有好成績了,即使它後輪用上了更為適合城市使用的螺旋彈簧,而不是以往的鋼板彈簧。

前言

在我們的用車過程中,最希望看到的是自己的愛車不會出現什麼小故障,能夠可靠地把我們從A點送到B點。但是質量問題是不可避免的,在最近美國質量反饋機構——消費者報告則出了全美最不可靠的10輛車型,其中就不乏在中國進行銷售的車型。

菲亞特 500L

美國售價:$24,595

故障點:日漸變差或者鎖止的變速箱、動力系統、車內電器

這輛意大利小車給人的感覺就是欠缺火候的,還有着一些重要的缺點。感謝最近的測試,我們知道了它座椅填充物硬、座椅太平、乘坐極為不舒服以及駕駛位置非常奇異,毫無疑問的一點是車主都後悔選擇了這款意大利兩廂車。除了這些問題以外,保險公司對這款車在高速公路上的前置碰撞還給出非常差的分數。

福特 嘉年華

美國售價:$16,595-$24,985

故障點:變速箱頓挫、噪音以及漏油,動力系統

這是一輛非常有駕駛樂趣的小車,在操控以及內飾設計表現都為人所津津樂道,而且車內隔音還是不錯的水平。但是後排卻是非常的“迷你”,我們測試的1.6L手動車型中表現出非常好的燃油效率,而6速自動擋在擁堵路況中卻表現出頓挫。另外的1.0T以及ST版本嘉年華你就要考慮一下你的腎問題,這種顛簸實在讓人難以忍受。

雪佛蘭 Tahoe

美國售價:$60,100

故障點:轉向振動、動力系統以及車內電器

這款體積巨大的SUV有着一個豪華的內飾,而且車內隔音相當不錯,還是一輛全尺寸的7座SUV,空間表現簡直是奢侈。不過在動力系統上,它雖然搭載的是5.3L V8發動機,但是動力響應卻是非常的差,

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

乘坐感受也是覺得懸架比較的硬,在運動感上是無可非議的,幸好電磁懸架可以改善一下這樣的狀況。

道奇 2500

故障點:方向盤振動,三元催化器,4驅系統,動力系統

道奇2500是一輛非常man的重載皮卡,能夠為美國承擔不少農活。它標配的是一款383馬力的5.7L V8 發動機,當然你可以選擇動力更強的6.7L V8發動機,只是油耗會變得非常的高。而在舒適性上就不用想象能有好成績了,即使它後輪用上了更為適合城市使用的螺旋彈簧,而不是以往的鋼板彈簧。

特斯拉 Model X

故障點:翼展門、門鎖、空調系統、車內电子系統

特斯拉Model X可以說是現今速度最快的電動SUV,而讓人關注的是它為了方便後排進出的翼展式車門,但是在開門關門的時候總是會浪費很多的時間。而巨大的前擋玻璃給人非常好的視野以及通透感,駕駛起來非常容易、安靜,還有着舒適的乘坐體驗以及較好的操控樂趣。

克萊斯勒 200

美國售價:$25,790-$33,620

故障點:日漸變差或者鎖止的變速箱、頓挫

它是一輛被很多人都喜歡的車型,甚至一些開着更高級別車型的駕駛者都喜歡這款汽車。即使它是一輛駕駛無趣、頓挫、粗暴的車,而且它的四缸發動機表現相當遲緩。不過V6發動機版本卻是表現卻是好了不止一個層次,還可以選擇四驅的驅動形式,不過這時就輪到變速箱不配合了。

雪佛蘭 Suburban/GMC Yukon XL

美國售價:$69,790

故障點:變速箱頓挫、動力系統、車內電器、4驅系統

如果你要一輛能夠坐下7個甚至更多的人,還有帶上不少的裝備的車型,那麼你的選擇應該就只有是這款全尺寸SUV——雪佛蘭Suburban/GMC Yukon XL了,雖然它尺寸大但是有着全車影像系統以及併線輔助系統,加上5.3L V8帶來的動力體驗,還有着電磁懸架系統,駕駛起來也不會非常的痛苦,但前提你一定能忍受變速箱頓挫以及油耗問題。

Jeep 自由本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

澳洲史上最大土地收購案 新國家公園將用以保育瀕危物種_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

摘錄自2020年6月29日台灣英文新聞報導

澳洲新南威爾斯州(NSW)政府近日宣布買下位於西北部的納里亞拉牧地(Narriearra Station),佔地約15萬3415公頃,是該州史上最大的私人土地收購案。新州環境與能源部長基恩表示,這次的土地收購將有助於協助保護瀕危物種、重要的棲息地和濕地。

納里亞拉牧地是受威脅野生動物的重要庇護所,擁有25種以上受威脅動物,當中包括瀕危灰草鷯鶯(Grey Grasswren)近九成的重要棲息地與繁殖區。納里亞拉牧地位於斯特爾國家公園(Sturt National Park)的東部,兩地相連可望創造近百萬公頃的保護區。

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

基恩說,該地鄰近「Pindera Downs」原住民區,納里亞拉牧地包含許多石器和古文物,他將邀請當地原住民為新國家公園命名。

生態保育
物種保育
生物多樣性
國際新聞
澳洲
土地收購
國家公園
新南威爾斯省
原住民
棲地保育
保護區

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」