数据绑定

模板中绑定的数据来均来自于data、computed属性。

简单绑定

数据绑定使用 Mustache 语法(双大括号), {{}}之内的可以是一些变量或者简单的表达式。

内容

<view> <text>{{ message }}</text> </view>

组件属性

<view id="item-{{id}}"> </view>

运算

<view hidden="{{flag ? true : false}}"> <text>Hidden </text> </view><view> <text>{{a + b}} + {{c}} + d </text></view><view c-if="{{length > 5}}"> </view>

  1. class Index {
  2. data = {
  3. a: 1,
  4. b: 2,
  5. c: 3,
  6. }
  7. }
  8. export default new Index();

view中的内容为 3 + 3 + d

c-model

应用于表单元素

  1. <template>
  2. <page title="chameleon">
  3. <view><text>message:{{message}}</text></view>
  4. <input c-model="{{message}}"></input>
  5. </page>
  6. </template>
  7. <script>
  8. class Comp {
  9. data = {
  10. message:'default-value'
  11. }
  12. watch = {
  13. message(){
  14. console.log('modelTest change');
  15. }
  16. }
  17. }
  18. export default new Comp();
  19. </script>
  20. <script cml-type="json">
  21. {
  22. "base": {}
  23. }
  24. </script>

c-model元素上不支持再绑定input事件,如果对于输入值变化之后想执行一些操作,可以通过 watch对应的值来进行;

应用于父子组件之间

父组件

  1. <template>
  2. <page title="chameleon">
  3. <scroller height="{{-1}}">
  4. <view><text>c-model的在组件上的使用</text></view>
  5. <comp c-model="{{modelValueTest2}}" ></comp>
  6. <view><text>组件使其改变{{modelValueTest2}}</text></view>
  7. </scroller>
  8. </page>
  9. </template>
  10. <script>
  11. class Index {
  12. data = {
  13. currentComp:'comp1',
  14. modelValueTest2:'sss'
  15. }
  16. methods = {
  17. handleClick(){
  18. this.currentComp = (this.currentComp === 'comp1' ) ? 'comp1':'comp2'
  19. }
  20. }
  21. }
  22. export default new Index();
  23. </script>
  24. <style>
  25. .scroller-wrap {
  26. display: flex;
  27. flex-direction: column;
  28. align-items: center;
  29. }
  30. </style>
  31. <script cml-type="json">
  32. {
  33. "base": {
  34. "usingComponents": {
  35. "comp1":"/components/comp1",
  36. "comp2":"/components/comp2"
  37. }
  38. },
  39. "wx": {
  40. "navigationBarTitleText": "index",
  41. "backgroundTextStyle": "dark",
  42. "backgroundColor": "#E2E2E2"
  43. },
  44. "alipay": {
  45. "defaultTitle": "index",
  46. "pullRefresh": false,
  47. "allowsBounceVertical": "YES",
  48. "titleBarColor": "#ffffff"
  49. },
  50. "baidu": {
  51. "navigationBarBackgroundColor": "#ffffff",
  52. "navigationBarTextStyle": "white",
  53. "navigationBarTitleText": "index",
  54. "backgroundColor": "#ffffff",
  55. "backgroundTextStyle": "dark",
  56. "enablePullDownRefresh": false,
  57. "onReachBottomDistance": 50
  58. }
  59. }
  60. </script>

子组件

  1. <template>
  2. <view>
  3. <input type="text" value="{{value}}" c-bind:input="handleInput"/>
  4. </view>
  5. </template>
  6. <script>
  7. class Comp {
  8. props = {
  9. value:{
  10. type:String,
  11. default:'default-value'
  12. }
  13. }
  14. methods = {
  15. handleInput(e){
  16. console.log('input',e);
  17. this.$cmlEmit('input', {
  18. value:e.detail.value
  19. })
  20. }
  21. }
  22. }
  23. export default new Comp();
  24. </script>
  25. <script cml-type="json">
  26. {
  27. "base": {}
  28. }
  29. </script>

Bug&Tips

注意 c-model的值只能是 data或者computed中的key值,不支持 modelValue.xxx 等需要二次计算的值;