(Framework7 移动webapp) Springboot 入门培训 8 Component 模板MVVM与AJAX

代码 代码 1538 人阅读 | 0 人回复

<
正在利用Framework7 开辟 webapp中,最经常使用的是方法是利用Component模板的MVVM的开辟方法,这类形式是利用模板妙技取ajax取dmo7(相似jquery)综开利用去天生页里html,它对开辟者利用js剧本才能请求十分的下。
Component 模板需求正在路由中的componentUrl属性去界说模板模板会见所在。
  1. routes = [
  2.   {
  3.     path: &#39;/路由途径/&#39;,
  4.     componentUrl: &#39;模板html页里地点url&#39;,
  5. ];
复造代码
1 Component 模板组成

Component 模板分为三年夜部门


  • template html元素层
  • style css款式层
  • script 剧本层
Component.html组成
  1. <template>
  2.   <div class="page" >
  3.     HTML内乱容
  4.   </div>
  5. </template>
  6. <style>
  7.   .red-link {
  8.     color: red;
  9.   }
  10.     CSS款式
  11. </style>
  12. <script>
  13.   // component 模块语法 mvvm形式 html页里元素取数据模子绑定
  14.   // 1 props 传进的参数
  15.   // 2 操纵的fk7内乱设工具
  16.   export default (props, {}) => {
  17.     return $render;
  18.   }
  19. </script>
复造代码
1 template

template 中是一切Framework7 UI组件元素,也能够是其他的html元素。一切页里元素皆要正在class="page"元素中。
  1. <template>
  2.   <div class="page">
  3.     html页里
  4.   </div>
  5. </template>
复造代码
template 中的一切元素皆要有 暗示结束。不克不及是< br/> < input type="" />< img src />如许的结束。
元素结束示例
  1. <template>
  2. <!-- 这类封闭是准确的 -->   
  3. < input type="" ></input>
  4. <br></br>
  5. <div>元素</div>
  6. <!-- 这类封闭是毛病的 -->   
  7. <br/>
  8. < input type="" />
  9. </template>
复造代码
2 style

界说页里css款式内乱嵌款式。
  1. <style>
  2.   .red-link {
  3.     color: red;
  4.   }                                    
  5. </style>
复造代码
3 script

剧本部门最次要的便是模板默许的函数,我们需求正在利用那个默许函数掌握全部模板页里的一切html元素,战自界说变乱,毗连背景数据,参数转换等功用。
  1. export default (props, {}) => {
  2.         return $render;
  3. }
复造代码
1 界说默许函数体 export default (props, {高低文参数}) => { return $render; }


  • props 参数,路由器会见过去的参数,普通状况是用没有上的
  • 高低文参数 相同高低文的内乱设参数
  • $render 返回带有组件 HTML 内乱容的标记模板笔墨
4 默许函数中参数取变乱

能够正在默许函数中界说参数【属性,数组,object】,能够正在 template 层中利用${称号}办法将界说的参数绑定到html元素中去。


  • 参数范例let 默许函数里的属性皆是 let
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. <p>${value}</p>    <------------------|
  5.     </div>                             |
  6.   </div>                               |
  7. </template>                            |
  8. <style>                                |
  9.   .red-link {                          |
  10.     color: red;                        |
  11.   }                                    |
  12. </style>                               |
  13. <script th:inline="javascript">        |
  14.   export default (props,{}) => {       |
  15.     let value = &#39;第一个法式&#39;;------------|
  16.    })
  17.     return $render;
  18.   }
  19. </script>
复造代码


  • 数组界说
    界说 let names=[] 数组工具,正在template模板中利用模板标记言语停止轮回遍历数组内乱容。
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. <div class="list simple-list">
  5. <ul>//模板言语轮回显现数据内乱容
  6.   ${names.map((name) => $h`    <----------|
  7.     <li >${name.id}${name.name}</li>      |
  8.    `)}                                    |
  9. </ul>                                    |
  10. </div>                                    |
  11. </div>                                    |
  12. </div>                                    |
  13. </template>                               |
  14. <script th:inline="javascript">           |
  15. //mvvm形式 html页里元素取数据模子绑定          |
  16.   export default (props,                  |
  17.                   {$update}) => {         |
  18.     let names=[     <---------------------|
  19.         {name:&#39;1笔记录&#39;,id:1},
  20.         {name:&#39;2笔记录&#39;,id:2},
  21.         {name:&#39;3笔记录&#39;,id:3}]
  22.     return $render;
  23.   }
  24. </script>
复造代码
$on 页里变乱

$on 参数为组件变乱,凡是是处置模板初初化变乱功用。
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. <div class="list simple-list">
  5. <ul>//模板言语轮回显现数据内乱容
  6.   ${names.map((name) => $h`   
  7.     <li @click=${onfind}>      <----------|   
  8.     ${name.id}${name.name}</li>           |
  9.    `)}                                    |
  10. </ul>                                    |
  11. </div>                                    |
  12. </div>                                    |
  13. </div>                                    |
  14. </template>                               |
  15. <script th:inline="javascript">           |
  16. //mvvm形式 html页里元素取数据模子绑定          |
  17.   export default (props,                  |
  18.                   {$update}) => {         |
  19.    //自界说变乱                             |
  20.    const onfind=(e)=>{   <----------------|
  21.        console.log(e.target);
  22.        alert(e.target);
  23.     };                 
  24.       let names=[
  25.         {name:&#39;1笔记录&#39;,id:1},
  26.         {name:&#39;2笔记录&#39;,id:2},
  27.         {name:&#39;3笔记录&#39;,id:3}]
  28.     return $render;
  29.   }
  30. </script>
复造代码
$ Dom7库

$为Framework7 自带的 Dom7库js援用工具。正在默许函数中可使用Dom7的功用。
  1. export default (props, {参数1,参数2}) => {
  2.         return $render;
  3. }
复造代码
$h 模板工具

模板言语工具,那个工具能够天生html页里。正在模板中援用了 $h 工具就能够正在template工具中写进html 元素。
  1. export default (props,{$on}) => {
  2.   $on(&#39;pageMounted&#39;, (e, page) => {
  3.     //页面熟成时分触收变乱
  4.   });
  5.   $on(&#39;pageInit&#39;, (e, page) => {
  6.     //模板页里初初化变乱
  7.   });
  8.   $on(&#39;pageBeforeIn&#39;, (e, page) => {
  9.     //页里dom天生前
  10.   });
  11.   $on(&#39;pageAfterIn&#39;, (e, page) => {
  12.     //页里创立视图
  13.   });
  14.   $on(&#39;pageBeforeOut&#39;, (e, page) => {
  15.      //页里dom天生后
  16.   });
  17.   $on(&#39;pageAfterOut&#39;, (e, page) => {
  18.      //页里创立视图后
  19.   });
  20.   $on(&#39;pageBeforeUnmount&#39;, (e, page) => {
  21.    //卸载页眼前
  22.   });
  23.   $on(&#39;pageBeforeRemove&#39;, (e, page) => {
  24.     //卸载页里后
  25.   });
  26.         return $render;
  27. }
复造代码
也能够正在template元素中天生模板
  1. export default (props,{$}) => {
  2.             //参看Dom7 api 不异jquery
  3.         $(&#39;p&#39;).text(&#39;欢送去到app页里&#39;)
  4.             return $render;
  5. }
复造代码
$f7 Framework7 工具

$f7 为Framework7 工具援用,能够经由过程那个援用创立取掌握Framework7 UI 组件。
  1. export default (props,{$}) => {
  2. return () => $h`
  3.     <div class="page">
  4.       <ul>
  5.         ${list.map((item) => $h`
  6.           <li>${item}</li>
  7.         `)}
  8.       </ul>
  9.     </div>`
  10. }
复造代码
$f7router 路由工具

$f7router 为整改组件中的路由援用工具。路由利用参考第两章路由利用。
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. ${user && $h`
  5.    <div class="list simple-list">
  6.     <ul>
  7.       <li>称号: ${user.name}</li>
  8.       <li>性情: ${user.sex}</li>
  9.       <li>年齿: ${user.age}</li>
  10.     </ul>
  11.   </div>
  12. `}
  13. </div>
  14. </div>
  15. </template>
复造代码
$el html元素工具

参数工具经由过程 .value属性中包含模板组件中HTML 元素的 Dom7 真例的工具。$el.value 需求正在组件天生后可使用。
  1. export default (props,{$,$f7}) => {
  2.     //Framework7 工具援用
  3.         $f7.dialog.alert(&#39;弹出框&#39;)
  4.     return $render;
  5. }
复造代码
$store 剧本缓存

$store 为剧本的缓存功用,能够将利用的数据保存正在那个缓存中。
  1. export default (props,{$,$f7,$f7router}) => {
  2.     //利用路由办法
  3.         $f7router.back();
  4.     return $render;
  5. }
复造代码
$update 模板更新

当模板html 元素发作变革的时分,需求挪用那个办法革新全部模板页里。十分主要的办法,假如他没有革新,页里中的html元素没有会从头天生。了解为 mvvm 形式中每次数据变革,需求用 $update();从头绑定一次。
  1. export default (props,{$el}) => {
  2.     //得到html元素工具
  3.         $el.value.find(&#39;p&#39;).addClass(&#39;red&#39;)
  4.     return $render;
  5. }
复造代码


  • template page 元素中 参加 th:inline=“text” 绑定Thymeleaf标签
  • script 元素中 参加 th:inline=“javascript” 绑定Thymeleaf标签
怎样辨别Thymeleaf标签取Component 模板标签
[(${元素})] Thymeleaf标签
${元素} Component 模板标签
4 Ajax 恳求利用

前里引见了模板中取Thymeleaf混淆的方法去获得背景数据疑息,可是这类方法正在mvvm形式中利用起去很没有便利。可使用Ajax 获得背景json的方法去停止数据交互,如许正在mvvm形式中利用起去很便利。$f7 援用了Framework7 自带的ajax恳求库,能够间接会见 XHR 恳求 (Ajax)。
界说Spring boot json办法
  1. const store = createStore({
  2.   user: {
  3.     userid: 10,
  4.   }
  5. });
  6. ---------- 模板页里 --------
  7. export default (props,{$store}) => {
  8.     //得到html元素工具
  9.     const users = $store.user.userid;
  10.         alert(  const users = $store.getters(&#39;users&#39;););
  11.     return $render;
  12. }
复造代码


  • 模板默许函数中挪用 $f7 参数中的 ajax办法去会见spring boot 中的json办法容器。
ajax 恳求url
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. <p>${telte}</p>    <------------------|  显现第两次
  5.     </div>                             |
  6.   </div>                               |
  7. </template>                            |
  8. <script th:inline="javascript">        |
  9. export default (props,                 |
  10.                                 {$on,$update}) => {    |
  11.   let telte=&#39;第一次&#39;;   <-------------- |
  12.   $on(&#39;pageInit&#39;, (e, page) => {       |
  13.     telte=&#39;第两次&#39;;     <-------------- |
  14.     //页里数据变革
  15.     $update();
  16.   });
  17. }
  18. </script>
复造代码
ajax返回字符串转成json工具


  • eval("("+ res.data+")"); 利用eval办法将ajax返回的字符串转换成json工具
1 app.request.get 恳求办法

利用 HTTP GET 恳求从效劳器减载数据
  1. @RequestMapping("/routes3")
  2. public String routes3(Model map) {
  3.         map.addAttribute("title", "那是个韬哥第一个法式");
  4.         return "app/Component";
  5. }
复造代码


  • url -字符串- 恳求 url
  • data 恳求参数。
  • success - function (data, status, xhr) - 恳求胜利时施行的回调函数。
  • error - function (xhr, status, message) - 恳求失利时施行的回调函数。
  • dataType 效劳器和谈范例。多是text或json。
2 app.request.post恳求办法

利用 HTTP POST 恳求从效劳器减载数据
  1. <template>
  2. <!-- Thymeleaf模板界说绑定 th:inline="text" 元素  -->
  3. <div class="page" th:inline="text">
  4. <div class="page-content">
  5. <!-- 背景的 title元素间接绑定  -->   
  6. <p>[(${title})]</p>
  7. <p>${value}</p>
  8.     </div>
  9.   </div>
  10. </template>
  11. <!-- component styles -->
  12. <style>
  13.   .red-link {
  14.     color: red;
  15.   }
  16. </style>
  17. <!-- Thymeleaf模板界说绑定 th:inline="javascript"  -->
  18. <script th:inline="javascript">
  19.   export default (props,{}) => {
  20. //绑定背景参数title给函数中的value,value经由过程模板绑定到html模板页里中
  21.     let value = &#39;[(${title})]&#39;;
  22.    })
  23.     return $render;
  24.   }
  25. </script>
复造代码


  • url -字符串- 恳求 url
  • data 恳求参数。
  • success - function (data, status, xhr) - 恳求胜利时施行的回调函数。
  • error - function (xhr, status, message) - 恳求失利时施行的回调函数。
  • dataType 效劳器和谈范例。多是text或json。
3 app.request.json 恳求办法

利用 GET HTTP 恳求从效劳器减载 JSON 编码的数据
  1. @RestController()
  2. @RequestMapping("/FK7")
  3. public class Fk7Conteroller {
  4.         @RequestMapping("/list")
  5.         public List getList1(){
  6.                 List list=new ArrayList();
  7.                 Map map=new HashMap();
  8.                 map.put("id", "1");
  9.                 map.put("name", "题目一***********");
  10.                 Map map1=new HashMap();
  11.                 map1.put("id", "2");
  12.                 map1.put("name", "题目两***********");
  13.                 list.add(map);
  14.                 list.add(map1);
  15.                 return list;
  16.         }       
  17. }
复造代码


  • url -字符串- 恳求 url
  • data 恳求参数。
  • success - function (data, status, xhr) - 恳求胜利时施行的回调函数。
  • error - function (xhr, status, message) - 恳求失利时施行的回调函数。
4 app.request.postJSON 恳求办法

利用 HTTP POST 恳求收收 JSON 数据
  1. <template>
  2. <div class="page" th:inline="text">
  3. <div class="page-content">
  4. <div class="list simple-list">
  5.   <ul>
  6.     ${user && user.map((u1) => $h`
  7.       <li>${u1.id}${u1.name}</li>
  8.    `)}
  9.   </ul>
  10. </div>
  11. </div>
  12. </div>
  13. </template>
  14. <script th:inline="javascript">
  15. export default (props,
  16.                 {$f7, $on, $update}) => {
  17.         let title = &#39;&#39;;
  18.     let user = [];
  19.     $on(&#39;pageInit&#39;, () => {
  20.       //ajax得到spring boot json串
  21.           $f7.request.get(&#39;./FK7/list&#39;).
  22.       then((res) => {
  23.         //字符串转成json工具
  24.                 user = eval("("+ res.data+")");
  25.                 $update();
  26.           });
  27.     })
  28.     return $render;
  29.   }
  30. </script>
复造代码


  • url -字符串- 恳求 url
  • data 恳求参数。
  • success - function (data, status, xhr) - 恳求胜利时施行的回调函数。
  • error - function (xhr, status, message) - 恳求失利时施行的回调函数。
5 request(options)通用办法

有庞大的ajax恳求,需求利用通用办法去给效劳收收恳求


  • request(options) 参数
  1. app.request.get( url , data , success , error , dataType )
  2. //例子
  3. app.request.get(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 },
  4.      function(data, status, xhr){
  5.     //会见胜利返回办法
  6.      alert(data);
  7.     },function(xhr, status, message){
  8.       //会见毛病返回办法
  9.     },&#39;json&#39;);
  10. // 利用then办法去处置返回办法
  11. app.request.get(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 })
  12.     .then(function (res) {
  13.     console.log(res.data);
  14. });
复造代码
经常使用参数
属性称号阐明url恳求URLasync同步仍是同步恳求,请将此选项设置为 falsemethod恳求办法(比方“POST”、“GET”、“PUT”)cache假如设置为 false,它将强迫恳求的页里没有被浏览器缓存。将缓存设置为 false 仅合用于 HEAD 战 GET 恳求contentType恳求和谈multipart/form-data或text/plain。关于跨域恳求,将内乱容范例设置为 application/x-www-form-urlencoded、multipart/form-data 或 text/plaincrossDomain跨域上强迫施行恳求(比方 JSONP),值设置为 true。当true时的X-Requested-With: XMLHttpRequest恳求头没有会被增加到恳求中时data参数processData合适默许的内乱容范例“application/x-www-form-urlencoded” ,请将此选项设置为falsedataType返回数据范例 text或jsonheaders恳求头 键/值对设置successfunction (data, status, xhr) 会见胜利errorfunction (xhr, status, message) 毛病办法

  • 将参数传进办法中停止挪用
挪用示例
  1. app.request.post( url , data , success , error , dataType )
  2. app.request.post(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 },
  3.      function(data, status, xhr){
  4.     //会见胜利返回办法
  5.      alert(data);
  6.     },function(xhr, status, message){
  7.       //会见毛病返回办法
  8.     },&#39;json&#39;);
  9. // 利用then办法去处置返回办法
  10. app.request.post(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 })
  11.     .then(function (res) {
  12.     console.log(res.data);
  13. });
复造代码
6 then取catch办法

​ 可使用then为会见胜利办法,catch会见失利回调办法。
  1. app.request.json ( url , data , success , error)
  2. app.request.json (&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 },
  3.      function(data, status, xhr){
  4.     //会见胜利返回办法
  5.      alert(data);
  6.     },function(xhr, status, message){
  7.       //会见毛病返回办法
  8.     });
  9. // 利用then办法去处置返回办法
  10. app.request.json(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 })
  11.     .then(function (res) {
  12.     console.log(res.data);
  13. });
复造代码
5 Ajax取Component MVVM 综开使用

Controller容器办法
  1. app.request.postJSON ( url , data , success , error)
  2. app.request.postJSON (&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 },
  3.      function(data, status, xhr){
  4.     //会见胜利返回办法
  5.      alert(data);
  6.     },function(xhr, status, message){
  7.       //会见毛病返回办法
  8.     });
  9. // 利用then办法去处置返回办法
  10. app.request.postJSON(&#39;./FK7/list&#39;,{ name: &#39;user&#39;, id:5 })
  11.     .then(function (res) {
  12.     console.log(res.data);
  13. });
复造代码
模板 HTML
  1. //主函数援用
  2. var app = new Framework7({ });
  3. app.request({
  4.   url:&#39;./FK7/list&#39;
  5. }).then(function (res) {
  6.     alert(res.data);
  7. });
复造代码
$h 利用本领

$h 轮回
  1. app.request({
  2.   url:&#39;./FK7/list&#39;,
  3.   async:true,
  4.   contentType:&#39;text/plain&#39;,
  5.   success:function(data, status, xhr){
  6.     alert(data);
  7.         }
  8. })
复造代码


  • user.map((u1) => 模板轮回功用
$h 判定嵌套
  1. app.request.postJSON(&#39;./FK7/list&#39;,{name: &#39;user&#39;,id:5 })
  2. .then(function (res){
  3.    list=res.data;
  4.    $update();
  5. }).catch(function (err) {
  6.    list=[];
  7.    $update();
  8.     console.log(err.xhr)
  9.     console.log(err.status)
  10.     console.log(err.message)
  11. });
复造代码


  • 模板轮回中能够嵌套判定 ,只需援用模板援用 $h 工具就能够正在template工具中写进html 元素。
获得变乱@click 参数

正在template 模板中界说变乱 <li @click=${onFind}> 只能获得变乱源 那个参数,变乱中不克不及获得其他变乱参数,我们怎样打点那个成绩呢?将参数变成元素属性保存正在元素中,经由过程变乱源转成dm7工具,掏出那个元素中的属性就能够了。
  1. @RestController()
  2. @RequestMapping("/FK7")
  3. public class Fk7Conteroller {
  4.         @RequestMapping("/list")
  5.         public List getList1(){
  6.                 List list=new ArrayList();
  7.                 Map map=new HashMap();
  8.                 map.put("id", "1");
  9.                 map.put("name", "题目一   ***********");
  10.                 Map map1=new HashMap();
  11.                 map1.put("id", "2");
  12.                 map1.put("name", "题目两   ***********");
  13.                 list.add(map);
  14.                 list.add(map1);
  15.                 return list;
  16.         }       
  17. }
复造代码


  • li元素中界说 id, name两个属性参数
  • li元素中界说@click 变乱
  • 默许函数中界说变乱
变乱工具 e.target 获得变乱元素的html内乱容。
正在将 e.target 工具放进到 dom7工具中,获得他元素属性工具$(e.target).attr(“id”)。
百度网盘下载所在
链接:https://pan.百度.com/s/1rDpcZtdBA6i7vBmYTMwcUA
提与码:1234
下载所在运转代码下载

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则