Regularjs入门基础总结1

1、结合资料对Regularjs的理解

它是一个基于动态模板来实现数据驱动的组件化的一个框架。

    动态模板:实现view是会随着数据变化的而变化

    数据驱动:双向数据绑定实现方式,数据绑定,局部刷新

    组件: 组件化开发,将一些公用的东西组件化。

2、构建的基础步骤

第一步 var hello = Regular.extend{} html文件可放在template里面,extend返回一个组件结构函数

第二步var component = new hello{} data在里面设置

第三步 component.$inject('#app'); 将组件插在目标节点中,实际上就是js里面的append

3、基础

3.1生命周期钩子

 1.在模板编译前调用、config(data)

 2.在模板编译后调用 init,未插入到实际的DOM节点中

 3.在组件销毁前调用 ,destroy,需要调用父类(this.supr()),如监听器、内部事件之类

3.2插值

 插值有两种:文本插值 

{content}
,属性插值 .modal-{klass}

1)如果属性是一个字符串,字符串中含有插值。那么解析后,会转化为相应的组合表达式。如:class="my-{className}",解析my-{className}后会得到'my-' + className,通过这个表达式来求取值

2)非指令类的属性,会在绑定值改变的时候,自动更新属性值。如class={myClass}

3.3语句

 1、条件语句,可以直接在页面编写 {#if condition}...{#elseif condition2}...{#else}...{#if} 

 2、list列表渲染,使用if控制属性,根据判断依据,指令、属性或事件会被添加或移除

               {# list item as obj}

                     

{obj_index}:{obj}

                       

                {/list}  

      使用 track语句 加速你的列表渲染,超大列表中推荐使用这个,他的渲染速度比较快 , 但是不能用在对象的列表渲染中

                {#list sequence as item by Expression}{/list}

 3、include用来标准引入一些内容,语句可用来引入动态的渲染片段。 

                {#include template}

                template: 一个Expression,求值结果是字符串或模板AST

3.4指令

 1. r-class

对象表达式,当值为真,添加对应的键作为class

 2.r-style   

 3.r-html

 4. r-model 表单与对应的字段形成双向绑定

 5. r-hide   

 6. r-animation

 7. on-click/.. 绑定事件  on-click on-click={ todos.splice(todo_index,1) 

3.5动画

  r-animation

  1. 例子:实现一个click触发时的有淡出的动画效果

 

  (1) on:click,当点击时候触发,

  (2) class:animated fadeIn,为按钮添加一个类名

  (3)等待500

  (4) 动画结束,类名移除

   2.一些动画command:on,emit(触发),call(触发),when... 

  (1)on和when是用于激活动画开始的Command。其中,对于on:event,当特定的event触发时,开始动画,event可以是当前节点的DOM事件,也可以是所在组件的事件。

  (2)when,和on的作用类似,只不过它是在when: expression中的expression为真时触发

  (3)例子: r-animation ='when:status==1 class:fadeIn',当status为1 时候,会触发这个动画效果 

  (4)emit:event抛出某个事件,可能会导致触发另一个动画序列

  (5) call:expression运行一个表达式,并进入脏检查 

3.6过滤器 

        个人理解是比较实用的。比如,你遍历到得到一个数据,为50.234,而实际只需要50,那么去掉后面的小数,则是需要过滤器,把没有用的值过滤掉。

Regular.filter("setTime",function(value, type){

    var theTime = parseInt(value);// 秒

    var theTime1 = 0;// 分

    var theTime2 = 0;// 小时

    if(theTime > 60) {

        theTime1 = parseInt(theTime/60);

        theTime = parseInt(theTime%60);

        if(theTime1 > 60) {

            theTime2 = parseInt(theTime1/60);

            theTime1 = parseInt(theTime1%60);

        }

     }

应用: {record.total_eff|setTime:record.type}

  |前面的数据为需要变化的数据;

  应用方法,function(value, type) value是为total_eff ,type是为record.type

3.7 $ref

在模板中,可以使用ref属性来标记一个节点或组件,并且ref可以动态使用

在实例化后,可以通过component.$refs 来获取你标记的节点

在我的理解中,$ref是一个标记,与js的获取节点功效一样,在div做完标记后,可以在方法中直接进行操作。如下面可以直接赋值。

var slider = this.$refs.slide;

evtObj.value = slider.value;

3.7 $state

可作用于路由的跳转

 当一个页面需要跳转到另一个页面时,可以直接添加点击事件,on-click={this.jump()

然后直接在方法中添加   this.$state.go('app.userquestion', { param: {page: page} })

第一个值为跳转的页面,后面的值为一些可以保留数值的参数

4、事件

regularjs的事件分为两类:DOM事件和组件事件

事件绑定写法:

如果传入的是表达式,那么只需要在事件触发时运行一次。

4.1 dom事件

    (1)事件绑定的语法为:on-eventName={Expression}。  事件触发时,Expression就会运行一次。

    (2) 示例:

    (3)在个人的理解中,dom事件为浏览器的本事自带的,不需要定义的,比如,click、mouseover、mouseout、键盘事件等等,

所以后面需要触发时不需要添加this.$emit("save",2)等等,一操作,就可以直接触发事件

     (4)阻止事件的方式有两种:{Expression}返回false(即 === false),或者使用$event.preventDefault()

4.2 组件事件

       component.$on: 用于添加事件监听

       component.$off: 用于解绑事件监听

       component.$emit:用于触发某个事件

4.3不同点

      组件事件由 $emit 方法抛出,而 DOM 事件由浏览器抛出

      DOM 事件由于 DOM 本身的特点,是可以冒泡的,而组件事件没有冒泡的机制

this.$on("save",function(arg){ console.log(arg); }); 添加组件事件

this.$emit("save",2)  触发组件事件 打印出2

this.$off("save");         解绑组件事件

5、组件

在regular中,组件 = 模板 + 数据 + 业务逻辑

5.1定义组件

使用 Component.extend 定义一个可复用的组件

const Component = Regular.extend( {

         template: ` 

                `,     

         config( data ){ 

                 data.count = 0; 

            }   

});   

5.2初始化组件

一种为new直接实例化,newComponent().$inject(document.body)

一种为内嵌组件

6、dom操作

        自己理解:regularJs获取节点有三种方法:(1)原生js获取(2)Regular.dom获取(3)$ref标记节点

如果只是简单的dom处理,可以直接使用Regular.dom。

        具体操作方法:

1. 绑定事件Regular.dom.on(element, event, handle);Regular.dom.on(element,"click", function(event){});

2. 移除事件监听器Regular.dom.off(node, event, handle);

3. 添加节点classNameRegular.dom.addClass(element, className)

4. 移除节点的某段classNameRegular.dom.delClass(element, className)

5. 判断节点是否拥有某个classNameRegular.dom.hasClass(element, className)

6. 根据浏览器和节点, 设置节点的textContent或innerTextRegular.dom.text(element[, value])

7. 设置或获取节点的innerHTML值Regular.dom.html(element[, value])

8.设置或获取节点的指定属性Regular.dom.attr(element, name [ , value])

7、表达式


8、计算属性computed

你可能感兴趣的:(Regularjs入门基础总结1)