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

Бодит ажилд нэг чиглүүлэгчээр шилжсэн хуудаснаас тухайн чиглүүлэгчид агуулагдах давхар чиглүүлэгчээр дамжин шинэ хуудас нээх хэрэгцээ их гардаг. Жишээ нь машины мэдээллийг харуулж буй 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} гэж өгнө. Өөрчлөлтийг хадгалаад хуудсаа шинэчлээд машины дэлгэрэнгүй мэдээллийг харвал чиглүүлэгчийг хуучин байдлаар зөв тодорхойлон хэвийн ажиллана. Туршаад үзээрэй. Энэ удаад чиглүүлэгийг илүү ойлгомжтой, энгийнээр тодорхойлсон. Програмын чиглүүлэгч хаягууд урт, олон тооны динамик утгуудаас бүрдэхээр бол нэрлэсэн чиглүүлэгчийг ашиглах нь илүү амархан.

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

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

VueJs фреймворкийн үндсэн ухагдхууныг танилцуулах ээлжит хичээлээр директивүүдийн тэмдэглэгээний талаар авч үзье. VueJs -ийн тодорхой директивүүдтэй илүү эвтэйхэн ажиллах боломжийг доорх код бүхий хуудас дээр харцгаая.

    <body>
        <div id="app">
            <h2>
                <a v-bind:href="url">E-surgalt</a>
            </h2>
            <h2>
                Тоолуур = {{ counter }}
            </h2>

            <button v-on:click="counter++">Нэмэгдүүлэх</button>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            new Vue({
                el: '#app',
                data: {
                    url: 'https:',
                    counter: 0
                }
            })
        </script>
    </body>

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

Төслийн 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

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

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

Сүүлийн жилүүдэд javascript фреймворкууд эрчимтэй хөгжснөөр интернетэд сууриласан програм, сайтын хэрэглэгч талын интерфесийг javascript -ээр бүтээх хандлага давамгайлах болоод байгаа. Ялангуяа SPA буюу нэг хуудас аплликашн технологи маш эрчимтэй орон ирсэн. Энэ хандлага ирээдүйдээ ч нилээд олон жил байр сууриа алдахгүй болов уу. Иймээс програмчлалын чиглэлээр суралцаж байгаа болон ажиллаж буй залуучууд javascript хэлийг эзэмшсэн өөрийн ажлын хэрэгсэл болгохыг хичээнгүйлэн зөвлөе.  

Энэ хичээлд ES6 -д шинээр бий болсон бүтэц буюу сумаар тодорхойлогдох функцтэй танилцая. Энэ нь өмнө байсан функцуудын нэгэн адил функц ч гэсэн зарим нэгэн онцлогтойг жишээгээр харцгаая. Өмнөх хувилбарт функцийг

const original = function () {
    return 100;
};
console.log(original());

дээрх байдлаар function түлхүүр үгийг ашиглан зарладаг. Кодод 100 утгыг буцаах функцийг зарлаад түүнийг original тогтмолд олгоод дараа нь түүнийг консолд үзүүлэхээр дуудсан.

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

Хичээлээр react компонентийн элементүүдийн хэвжүүлэлтэд хэрэг болох нэгэн аргачлалыг авч үзье. Тухайлбал элементийг inline -аар хэвжүүлэлтийн үед ашиглах техник юм. Иймээс Car компонентийн хэвжүүлэлтийн Car.css файлаас

.Car {
  margin-bottom: 10px;
  display: block;
  padding: 10px;
  border-radius: 5px;
}

border, box-shadow хэвүүдийг хасан тэдгээрийг Car компонентод inline -аар хэвжүүлэлтээр

  const style = {
    border: '1px solid #ccc',
    boxShadow: '0 4px 5px 0 rgba(0, 0, 0, .14)'
  }
  return (
    <div className="Car" style={style}>
      <h3>Машиний нэр: {props.name}</h3>
      <p>Он: <strong>{props.year}</strong></p>
      <input
        type="text"
        onChange={props.onChangeName}
        value={props.name}
        className={inputClasses.join(' ')}
      />
      <button onClick={props.onDelete}>Устгах</button>
    </div>
  )

style хувьсагчид тодорхойлоод Car компонентийг багцалж буй div -ийн style атрибутад дамжуулах болгон өөрчилье.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

тэгшитгэлийн хувьд утгыг ол

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

 

тэгшитгэлийн хамгийн их сөрөг язгуурыг ол.

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

 

тэнцэтгэл b -ийн ямар утганд биелэх вэ?

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