Давхар чиглүүлэгчид

Бодит ажилд нэг чиглүүлэгчээр шилжсэн хуудаснаас тухайн чиглүүлэгчид агуулагдах давхар чиглүүлэгчээр дамжин шинэ хуудас нээх хэрэгцээ их гардаг. Жишээ нь машины мэдээллийг харуулж буй Car компонентийн үзүүлж буй хуудаснаас тухайн машины талаар илүү дэлгэрэнгүй мэдээллийг харуулах хуудаст шилжих хэрэгтэй болсон гэе. Үүнийг VueJs -д давхар чиглүүлэгчийг ашиглан хийдэг. Car компонентоос өөр хуудаст шилжилт хийх гэж байгаа тул түүний шаблонд

<template>
  <div>
    <h1>Car id {{ id }}</h1>
    <button class="btn btn-sm btn-primary mb-2" @click="backToCars">Back</button>
    <br>
    <button class="btn btn-info mt-2">Full info</button>
  </div>
</template>

дахин нэг товчийг нэмэн өгье.

Жич: Хичээлийн материалийг ойлгохын тулд өмнөх хичээлүүдийг үзсэн байх хэрэгтэйг сануулахын дээр Vuejs фреймворкийн үндсэн ойлголтууд хичээлийн багцыг үзэхийг зөвлөе.

Төслийг хөтөч дээр нээгээд машины мэдээлэл үзүүлэх Car компонентод шилжих холбоосоор орвол

гэж харагдана. Товчнуудын харагдах байдлыг арай өөр классуудыг ашиглан хэвжүүлсэн. Веб програмчлалд суралцахын тулд css хэл, фреймворкуудийн ажиллагааг сайн ойлгон мэдсэн байх ёстойг зөвлөе. Бидний шийдэх асуудал бол хуудаст нэмсэн Full info товчийг дарахад өөр хуудаст шилжихгүйгээр Car компонентод тухайн машины талаарх дэлгэрэнгүй мэдээллийг үзүүлэх шаардлагатай. Үүнд л давхар чиглүүлэгчийг ашигладаг. Үүнийг хэрэгжүүлэе. Эхлээд тухайн машины дэлгэрэнгүй мэдээллийг үзүүлэх CarFull компонентийг төслийн pages хавтаст

<template>
  <div>
    <h4>Cars name: Toyota</h4>
    <h5>Cars year: 2019</h5>
  </div>
</template>

<script>
export default {
    
}
</script>

кодтойгоор үүсгэн өгье. Хичээлийн зорилго давхар чиглүүлэгчийг ойлгох тул машины дэлгэрэнгүй мэдээллийг үзүүлэх хуудсыг статикаар зохиосон. Компонентийг үүсгэсэн тул routes.js файлд тухайн хуудаст шилжих

...
import CarFull from './pages/CarFull'

export default new VueRouter({
  routes: [
    {
      path: '',  
      component: Home
    },
    {
      path: '/cars',  
      component: Cars
    },
    {
      path: '/car/:id',  
      component: Car,
      children: [
        {
          path: 'full',
          component: CarFull
        }
      ]
    }        
  ],
  mode: 'history'
})

чиглүүлэгчийг бүртгэн өгнө. Машины дэлгэрэнгүй мэдээллийг үзүүлэх CarFull компонент Car компонентийн чиглүүлэгчээр дамжигдан дуудагдах тул түүнийг чиглүүлэгчид давхар чиглүүлэгийг оруулан өгөх хэрэгтэй. Тухайн чиглүүлэгчид агуулагдах давхар чиглүүлэгчдийг children талбарт обьектуудын массиваар тодорхойлон өгдөг. Массив ердийн чиглүүлэгчийн тодорхойлттой ижил обьектуудыг л агуулна. Давхар чиглүүлэгийн path талбарт 'full' мөрийг харин component талбарт CarFull компонентийг заасан. Компонентийн хувьд ойлгомжтой. Харин замын тухайд гэвэл серверийн үндсэн зам дээр эцэг чиглүүлэгчийн замыг нэмээд араас нь хүүхэд буюу давхар чиглүүлэгчийн замыг / тэмдэгтийн араас залган үүснэ. Өөрөөр хэлбэл http://localhost:8080/car/3/full хэлбэрийн хаяг үүснэ. Чиглүүлэгч хаягийн 3 бол динамикаар орж ирнэ гэдгийг анхаарна уу. Одоо Car компонентод нэмэн оруулсан Full info товчийг

<template>
  <div>
    <h1>Car id {{ id }}</h1>
    <button class="btn btn-sm btn-primary mb-2" @click="backToCars">Back</button>
    <br>

    <router-link
      class="btn btn-info mt-2"
      tag="button"
      :to="'/car/' + id + '/full'"
    >
      Full info
    </router-link>
  </div>
</template>

гэж холбоос болгох хэрэгтэй. Full info товчийг холбоос болгохдоо router-link директивийг ашигласан. router-link директивт bootstrap -ийн хэвээс гадна router-link тегийг холбоос болгохдоо түүнийг button тегээр солихыг заана. Үүнээс гадна router-link директив үүсгэх чиглүүлэгч ямар хаягаар шилжилт хийхийг to атрибутад заах ёстой. Машины id динамикаар ирэх учраас to атрибутыг javascript кодоор үүсэх динамик "'/car/' + id + '/full'" мөртэй холбон өгнө.
Төслийн өөрчлөлтийг хадгалаад хуудсаа хөтөч дээр нээгээд Full info товчийг дарвал

хаягийн мөрөнд шилжилтийн чиглүүлэгч гарч ирэх ч хуудаст юу ч үзүүлэхгүй. Яагаад гэвэл бид Vuejs -д чиглүүлэгчийн хүүхэд буюу давхар чиглүүлэгчээр ачааллагдах хуудас буюу компонентийг хаана оруулан ирэхийг заан өгөх хэрэгтэй. Та санаж байгаа бол App компонентийн цэсийг сонгоход чиглүүлэгчээр оруулан ирэх компонентийг хаана байршуулахыг router-view директивээр заан өгч байсан. Бид Car компонентийн чиглүүлэгчид шинэ түвшингийн чиглүүлэгчийг нэмэн өгсөн тул компонент өөрийн хүүхэд чиглүүлэгчдийг хаана байршуулахыг бас заах хэрэгтэй болсон гэсэн үг. Иймээс Car компонентийн шаблонд

<template>
  <div>
    <h1>Car id {{ id }}</h1>
    <button class="btn btn-sm btn-primary mb-2" @click="backToCars">Back</button>
    <br>

    <router-link
      class="btn btn-info mt-2"
      tag="button"
      :to="'/car/' + id + '/full'"
    >
      Full info
    </router-link>
    <hr>
    <router-view></router-view>
  </div>
</template>

router-view директивийг нэмэн оруулъя. Ингэснээр Car компонентийн чиглүүлэгчийн дэд чиглүүлэгчдийг хаана оруулан ирэхийг Vuejs мэднэ. Төслийн өөрчлөлтийг хадгалаад хуудсаа шинэчлээд Full info товчийг дарвал

машины тухай дэлгэрэнгүй мэдээллийг харуулах компонент хуудаст орж ирнэ. Одоо аль ч машиныг сонгосон чиглүүлэгч өөрчлөгдөн тухайн машины дэлгэрэнгүй мэдээллийг харуулах компонентийг оруулан ирнэ.
Car компонентийн Full info товчийг router-link директивээр холбоос болгохдоо түүний чиглүүлэгчийг тодорхойлсон :to="'/car/' + id + '/full'" бичлэг нилээд төвөгтэй болсон байгаа. Энгийн чиглүүлэгчийн хувьд ийм байдлаар хийгээд байж болох ч нарийн чиглүүлэгчдийг тодорхойлох үед налуу зураасууд, динамик хэсгүүд, хашилтууд гээд алдаа гаргах магадлал өндөр болдог. Vuejs -д ийм чиглүүлэгч буюу холбоосыг үүсгэх механизм байдаг. Энгийнээр хэлбэл генератор юм даа. Чиглүүлэгчдэд тодорхой нэрийг өгч болдог тул машины дэлгэрэнгүй мэдээллийн хуудаст шилжих чиглүүлэгчийн тодорхойлолтод

export default new VueRouter({
  routes: [
    ...
      path: '/car/:id',  
      component: Car,
      children: [
        {
          path: 'full',
          component: CarFull,
          name: 'carFull'
        }
      ]
    }        
  ],
  mode: 'history'
})

carFull утгатай name талбарыг нэмэн оруулъя. Чиглүүлэгчийн нэрийг өөрийн хүссэнээр л өгнө. Чиглүүлэгчийн нэр Car компонентийн шаблонд Full info товчийг router-link директивээр холбоос болгохдоо

<template>
  <div>
    <h1>Car id {{ id }}</h1>
    <button class="btn btn-sm btn-primary mb-2" @click="backToCars">Back</button>
    <br>

    <router-link
      class="btn btn-info mt-2"
      tag="button"
      :to="{name: 'carFull', params: {id: id}}"
    >
      Full info
    </router-link>    
    <hr>
    <router-view></router-view>
  </div>
</template>

гэж ашиглая. to атрибутын утгаар javascript обьектыг өгөх тул түүнийг обьекттой холбох хэрэгтэй. Обьектод чиглүүлэгчийг тодорхойлохдоо name талбарт ямар нэртэй чиглүүлэгчид хандахыг /манай тохиолдолд carFull/ заана. Чиглүүлэгчийг үүсгэхэд динамик хэсэг оролцох тул түүнийг params талбарт обьектоор тодорхойлон өгнө. Манай тохиолдолд машины id байгаа учраас {id: id} гэж өгнө. Өөрчлөлтийг хадгалаад хуудсаа шинэчлээд машины дэлгэрэнгүй мэдээллийг харвал чиглүүлэгчийг хуучин байдлаар зөв тодорхойлон хэвийн ажиллана. Туршаад үзээрэй. Энэ удаад чиглүүлэгийг илүү ойлгомжтой, энгийнээр тодорхойлсон. Програмын чиглүүлэгч хаягууд урт, олон тооны динамик утгуудаас бүрдэхээр бол нэрлэсэн чиглүүлэгчийг ашиглах нь илүү амархан.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 993 Төлбөртэй

Сүүлийн жилүүдэд javascript сангуудын хөгжлөөр интернет програмчлалд хувьсгал гарч байгаа гэж хэлэхэд болно. Учир нь javascript хэлийг бүх хөтөч ойлгодог учраас хэрэглэгч талын ажиллагааг динамик болгон сервер талын ажиллагааны ачааллыг бууруулахад чухал үүрэг гүйцэтгэснээр SPA буюу нэг хуудаст програмыг зохиох боломжийг нээсэн. Javascript сангуудын нэг болох Vuejs сангийн тухай хичээлийг сайтад цувралаар нийтэлж байгаа билээ. Хичээлүүдийг бүгдийг Vue фреймворкийн үндсэн ойлголтууд багцаас үзэхийг зөвлөе.

Хүүхэд компонент хоорондын холбоо хичээлд төслийн компонентуудад зохих өөрчлөлтүүдийг оруулаад програмын ажиллагааг шалган үзэхэд Тоолуурыг нэмэгдүүлэх товчийг дарахад тоолуурын утга нэмэгдэхгүй байсан шалтгааныг танд үлдээсэн билээ. Товч ажиллахгүй байсан шалтгаан энгийн. Та Доод шатны /хүүхэд/ компонентоос параметр дамжуулах хичээлийн материалыг сайн ойлгосон бол учрыг маш хурдан олно. Товч ажиллахгүй байсан шалтгаан гэвэл Car компонентийн updateCounter аргаас үүсгэсэн counterUpdated үйл явцын сонсогчийг App компонентод тавин өгөөгүйтэй холбоотой. Тэгвэл үйл явцын сонсогчийг App компонентийн хэвд Car компонентийг оруулан ирэх app-car тегд

<template>
  <div>
    <h1>Эцэг: {{ carName }}</h1>
    <app-counter :counter="counter"></app-counter>
    <app-car
      :carName="carName"
      :carYear="carYear"
      :counter="counter"
      :changeFunc="changeCarName"
      @nameChanged = "carName = $event"
      @counterUpdated = "counter = counter + $event"     
    ></app-car>  
  </div>
</template>

@counterUpdated = "counter = counter + $event" гэж тавин өгөөд програмыг ажлуулан шалгавал

бүгд хэвийн ажиллана. App компонентийн хувьд Car, Counter компонентууд хоёулаа хүүхэд компонентууд ч Car компонентоос Counter компонентод хандан өөрчлөлт хийж байгаа. Энэ нь Доод шатны /хүүхэд/ компонентоос параметр дамжуулах механизмтай бараг төстэй ажиллахын дээр кодод үйл явцын сонсогч, нэг ижил параметрүүдийг дамжуулах, эцэг компонентоор дамжин харьцах гээд нилээд их логикийг оруулан өгч байгааг та ажигласан байх. Цөөн компонентууд оролцсон жижигхэн програмын хувьд аргачлал бүрэн боломжийн боловч компонентуудын тоо олшрон компонентууд нэгийгээ агуулах түвшин гүн болож ирэхэд эцэг компонентоор дамжуулан удирдахад хүнд болж ирнэ.

  Нээгдсэн тоо: 539 Бүртгүүлэх

Төслийн Car компонентийг Stateful буюу Component классаас удамшсан класс байдлаар тодорхойлсноор react компонентийн амьдралын циклүүдэд хандах боломжийг авсан. Car компонентод дээр компонентийн төлвийн өөрчлөлтүүдийн циклүүдийг харцгаая. Үүний тулд Car компонентийн кодийг

class Car extends React.Component {

  shouldComponentUpdate(nextProps, nextState) {
    console.log('Car shouldComponentUpdate', nextProps, nextState)
    return true
  }

  componentDidUpdate() {
    console.log('Car componentDidUpdate')
  }

  render() {
    console.log('Car render')
    const inputClasses = [styles.input]

    ...

    return (
      <div className={styles.Car} style={style}>
        <h3>Машиний нэр: {this.props.name}</h3>
        <p>Он: <strong>{this.props.year}</strong></p>
        <input
          type="text"
          onChange={this.props.onChangeName}
          value={this.props.name}
          className={inputClasses.join(' ')}
        />
        <button className={styles.btn} onClick={this.props.onDelete}>Устгах</button>
      </div>
    )
  }
}

export default Car

гэж өөрчилье.

  Нээгдсэн тоо: 2103 Нийтийн

Хичээлээр ES6 -гийн кодыг ES5 кодоор компиляц хийх талаар авч үзье. Юуны түрүүнд үүнийг ямар учраас хийх хэрэгтэй вэ? гэдгийг тайлбарлая. ES бол EcmaScript -ийн хураангуйлсан бичлэг бөгөөд 6 нь Javascript -ийн хувилбарын дугаар. ES6 гараад удаагүй байгаа ч түүнийг олон хөтөчүүд дэмжин ажилладаг болоод байгаа. Жишээ нь Chrome хөтөч ES6 дээр бичигдсэн кодыг шууд ажиллуулна. Гэвч олон хэрэглэгчид ES6 -г шууд дэмждэггүй хуучин хөтөчүүдийг жишээ нь Internet Explorer, Firefox -ийн хуучин хувилбарыг хэрэглэсээр байгаа. Харин эдгээр хуучин хөтөчүүд ES5 -ийг бүрэн дэмжин ажилладаг тул програмыг бүх хэрэглэгчид ямар нэгэн асуудалгүйгээр ашиглах боломжийг бүрдүүлэх зорилгоор ES6 -гийн кодыг ES5 кодоор компиляц хийх хэрэгцээ бий.

  Нээгдсэн тоо: 860 Төлбөртэй

ES6 -д бий болсон модулийн системийн дүрмийн талаар үзэхийн өмнө зарим бэлтгэл ажлыг хийх хэрэгтэй. Төслийн үндсэн хавтаст extra.js файлыг үүсгээд дараах кодыг

let name = 'e-surgalt.com';
let age = 6;

оруулан өгье. extra.js файлд зарлагдсан хоёр хувьсагчийг index.js файлд оруулан ирэх хэрэг гарлаа гэе. Энд хоёр нөхцлийг хангана. Нэгд бусад модулууд extra.js файлд зарлагдсан хувьсагчдыг өөртөө ашиглах боломжийг нээх зорилгоор түүнийг гадагш экспортлох ёстой. Хоёрт бусад модулаас эскпорт хийгдсэн зүйлийг ашиглах модул нь импортлох хэрэгтэй.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

Нээгдсэн тоо : 241

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

Нээгдсэн тоо : 331

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

Нээгдсэн тоо : 293

 

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

Нээгдсэн тоо : 391

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

Нээгдсэн тоо : 434

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Нээгдсэн тоо : 463

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

Нээгдсэн тоо : 535

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

Нээгдсэн тоо : 614

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

Нээгдсэн тоо : 643

 
Энэ долоо хоногт

тэнцэтгэл бишийг бод.

Нээгдсэн тоо : 1093

 

илэрхийллийн x=3 утгыг ол.

Нээгдсэн тоо : 506

 

16 см суурьтай, 10 см хажуу талтай адил хажуут гурвалжин өгөгджээ. Гурвалжинд багтсан болон гурвалжинг багтаасан тойргуудын радиус болон тойргуудын төв хоорондын зайны нийлбэрийг ол.

Нээгдсэн тоо : 413