今天的主角是ms-visible,它的效果類擬於jQuery的toggle,若是它後面跟着的表達式爲真值時則顯示它所在的元素,爲假值時則隱藏。不過顯示不是 display:none這麼簡單,衆所周知,display擁有inline, inline-block, block, list-item, table, table-cell等十來個值,好比用戶以前是讓此LI元素表示inline-block,實現水平菜單效果,你直接display:block就會撐破布局。所以元素以前是用什麼樣式顯示,須要保存下來,當表達式轉換爲真值時再還原。html
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <script src="./dist/avalon.js"></script> <script > var vm = avalon.define({ $id: "test", toggle: false, array:[1,2,3,4] }) </script> <style> table{ width:300px; border-collapse: collapse; border:1px solid red; } td { padding:5px; border:1px solid red; } .menu{ display:inline-block; *display:inline; *zoom:1; width:140px; padding:5px 20px; text-align: center; margin-left:1em; border: 1px solid greenyellow; } .btn{ padding:5px 20px; margin-left:1em; display: inline-block; } </style> </head> <body ms-controller="test" > <table ms-visible="@toggle" border="1" > <tr ms-visible="@toggle"><td>1111</td><td>1111</td></tr> <tr><td>1111</td><td>1111</td></tr> </table> <br/> <table border="1" > <tr ms-visible="@toggle"><td >aaa</td><td>bbb</td></tr> <tr><td ms-visible="@toggle">ccc</td><td>ddd</td></tr> </table> <table border="1" > <tr ms-for="el in @array"> <td ms-visible="@toggle">{{el}}</td> <td ms-visible="@toggle">{{el+10}}</td> </tr> </table> <div style="display:none" class="menu" ms-visible="@toggle">item</div> <button style="display:none" class="btn" type="button" ms-visible="@toggle">btn</button> <p><input type="button" ms-click="@toggle = !@toggle" value="click me"></p> </body> </html>
這裏用到ms-for循環指令及ms-click事件指令,語法與ng沒有二致,不懂能夠暫時忽略。web
再看它可否處理內聯樣式的干擾:佈局
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <script src="./dist/avalon.js"></script> <script > var vm = avalon.define({ $id: "test", toggle: true }) </script> <style> div div{ flex:1; margin: 20px; height: 30px; background: #a9ea00; } </style> </head> <body ms-controller="test" > <div ms-visible="@toggle" style="display: flex;display:-webkit-flex;background: #ffd"> <div></div> <div></div> <div></div> </div> <p ms-click="@toggle = !@toggle">click me</p> </body> </html>
咱們再來一個有用的例子,作一個切換卡。flex
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <script src="./dist/avalon.js"></script> <script > var vm = avalon.define({ $id: "test", curIndex: 0, //默認顯示第一個 buttons: ['aaa', 'bbb', 'ccc'], panels: ["<div>面板1</div>", "<p>面板2</p>", "<strong>面板3</strong>"] }) </script> <style> button{ margin:1em 3em; } .panel div{ height:200px; background: #a9ea00; } .panel p{ height:200px; background: green; } .panel strong{ display:block; width:100%; height:200px; background: #999; } </style> </head> <body ms-controller="test" > <div> <button ms-for='(i, el) in @buttons' ms-click='@curIndex = i'>{{el}}</button> </div> <div class='panel' ms-for='(jj, el) in @panels' ms-visible='jj === @curIndex' ms-html='el'></div> </body> </html>