AngularJs定制样式插入到ueditor中之题材总结

 

 

 
 总结一下要好吃编辑器定制样式的历程遭到所碰到的题材,主要是编辑器的二次开发接口,以及用angular定制样式,问题多多,终于当**的扶植下,完成了,还剩余老版本与初本子的相没有干好,不过好。下面分别授课问题。

   ueditor的开发

 
 你得于官网上下载任意版本,进行下即可:http://ueditor.baidu.com/website/download.html 下充斥后照官网及的配置就可以使用。文档地址:http://fex.baidu.com/ueditor/ 关于ueditor二次开发问题还确实不掉,这里列下。

   1.ueditor自动用div标签过滤成p标签

   
 在定制样式经过遭到,发现div全部吃过滤未p标签,网上查找了好多资料,但犹不行,后来盼出大神写到,不同版本的ueditor配置不一致,这里描绘下自己之解决办法是:打开ueditor.config.js配置文件,添加底下的代码:

  , allowDivTransToP: false

   
 注意是以window.UEDIROE_CONFIG里面手动添加!另外为有人遇到类似之情景解决办法,这里可以参考:http://www.cnblogs.com/Olive116/p/3464495.html

   2.哪管定制的体制插入到编辑器里面也?

   于编辑器里面提供了接口,我们来探。

function insertHtml() {
        var value = prompt('插入html代码', '');
        UE.getEditor('editor').execCommand('insertHtml', value)
    }

那哪些以咱们好的品种遭到应用该接口也?首先使实列化编辑器,通常是直接利用UE.getEditor()来取实例。

//使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例

利用之前我们得先把该编辑器引入进来,才会调用该道。

<script src=”libs/ueditor/ueditor.config.js”></script>
<script src=”libs/ueditor/ueditor.all.min.js”></script>

每当咱们的angular的档次被开创编辑器实例如下,编辑器提供ready的主意来实例化:

// 创建编辑器的实列
  $scope.ready = function (ueditor) {
    window.editor = ueditor;
  };

OK,我们现在就可使editor这个编辑器实例了。接下来看看ng定制的样式。

   ng定制的体制

 
 先来拘禁下,我们用手写的手风琴菜单样式。下载地址:https://github.com/foreverjiangting/set-menu/tree/master/menu 这里以的互动使用了data-toggle=”collapse”,但与ng有冲突,所以需要为此ng来支配交互。我们来看看怎么写:
 

ECMAScript 1

 <!-- 添加工具栏 -->
            <div class="set-toolbar">
              <h4 class="text-center">工具栏</h4>
              <!-- sidebar content -->
              <div class="sidebar-menu">
                <a ng-click="toggle('titleStyle')" class="nav-header menu-first " >首页</a>
                <ul ng-hide="titleStyle" id="userMeun" class="nav  nav-list  menu-second">
                    <li ng-repeat="title in sources.titles" ng-click="insertHtml('titles', title)"><a>{{title.name}}</a></li>
                </ul>

                <a ng-click="toggle('titleIcon')" class="nav-header menu-first">图标</a>
                <ul ng-hide="titleIcon" id="articleMenu" class="nav nav-list  menu-second">
                  <li class="set-image" ng-repeat="img in sources.imgs" ng-click="insertHtml('imgs', img)"><a><img ng-src="{{img.url}}"></a></li>

                </ul>

                <a ng-click="toggle('titleYouxia')" class="nav-header menu-first ">生活</a>
                <ul ng-hide="titleYouxia" id="glyphicnMenu" class="nav nav-list  menu-second">
                  <li ng-repeat="yx in sources.yxs" ng-click="insertHtml('yxs', yx)"><a>{{yx.name}}</a></li>
                </ul>

                <a ng-click="toggle('titleServe')" class="nav-header menu-first ">留言板</a>
                <ul ng-hide="titleServe" id="serveMenu" class="nav nav-list  menu-second">
                  <li ng-repeat="ser in sources.sers" ng-click="insertHtml('sers', ser)"><a>{{ser.name}}</a></li>
                </ul>

                 <a ng-click="toggle('titleArticle')" class="nav-header menu-first ">推荐文章</a>
                <ul ng-hide="titleArticle" id="ArticleMenu" class="nav nav-list  menu-second">
                  <li ng-repeat="arc in sources.arcs" ng-click="insertHtml('arcs', arc)"><a>{{arc.article}}</a></li>
                </ul>
              </div>
              <!-- 内容主题结束 -->
            </div>

ECMAScript 2

js里面的代码如下:

ECMAScript 3

 // 工具栏交互样式
  $scope.titleStyle = $scope.titleIcon = $scope.titleYouxia = $scope.titleServe = $titleArticle=false;
  $scope.toggle = function(style){
        $scope[style] =! $scope[style];
    }

ECMAScript 4

ng控制的手风琴效果,简单方便,代码量少。效果如下:

ECMAScript 5

体制写好后便栽到编辑器中,那么如何插入呢?这里产生少栽,直接插,和因查找后的文章进行插队。直接插入的语句比较简单。

$scope.insertHtml = function (type, item) {
    if (type === 'titles' || type === 'imgs') {
      editor.execCommand('insertHtml', item.html);
    } 

安插后的效益如下:

ECMAScript 6

本来我们这么做来啊用吗?主要是用编辑器里面的始末,利用ng数据绑定,反映至app上,从而制作app的篇章编辑界面。

     搜索的效益做

   
 数据自然是由api里面获取,ng如何得到api里的数额也?我们来探,主要是运用http,获取数据,然后利用then方法进行回调,得到http,获取数据,然后用then方法开展回调,得到scope.data的数据。

angular.module('service')
.service('ArticleService', function ($http) {
  return {searchArticle: function(title){ return $http.get('api/article/search',{ data: { title:title } }); } }; });

   
 这里我们声明了ArticleService,并给它们回到了api数据,那么我们用欠依赖注入要调用的页面即可调用其艺术。还是看下代码:通常服务调用

API返回的多少在一个文件夹里面要控制数据的控制器单独在一个文书夹里面,那么我们来拘禁下控制器里是怎回调api的数量。

angular.module('article.controllers')
.controller('serviceCtrl', function ($scope, $rootScope, $filter, $timeout, $state, $stateParams, ContentService,, ArticleService, type) {

留意,你需要把ArticleService注入到控制器里面,然后才能够回调数据。怎么回调数据也?看下面的代码:

ECMAScript 7

var arcfullSearch={
      text: '',
      result: [],
      selected: [], //选择后的数据先存入数组
      beginSearch: function () {
          var self = this;
          var text = self.text.trim();
          if(!text) return;
          ArticleService.searchArticle(text).then(
            function (data){    
            //获取得到数据   第二个data表示获取数组里的内容,第一个是传进来的参数 
               self.result = data.data;//获取数据
            }, function (err) {
               console.log(err);
            });          
      },
  };

ECMAScript 8

OK,我们遂之回调至了函数数据。关于寻找部分,下面总结下未知道的知识点。

  总结知识点

1.怎么以数组变成字符串的写法

ECMAScript 9

2.有关replace替换为函数的用法

 
 ECMAScript规定,replace()方法的参数replacement可以是函数也得是字符串。在这种情形下,每个匹配都调用该函数,它回到的配

符串将替换文本下。function回调函数返回的首先独参数表示相当到的字符,第二只与随后犹是相当到的分组数据。来拘禁下代码。

ECMAScript 10

 

3.关于[p.slice(0,index)][p.slice(index+1)]大凡啊不良?调试一下不怕了解了。

ECMAScript 11

 再来对待合成代码就清楚了什么意思。

ECMAScript 12

var arr = serve.map(function (xx) {
      return item.html.replace(/{{([\w\.]+?)}}/gi, function (match, p) {
             var index = p.indexOf('.'); 
             if (index > 0) {
                return formatField(xx[p.slice(0, index)][p.slice(index+1)]);
              } else {
                return formatField(xx[p]);
              }
      }); 
});

ECMAScript 13

4.关于定时器setTimeout的规律,先来看看代码

ECMAScript 14

  为什么输出的是-1吗?我们事先来拘禁下原理setTimeout() 

  setTimeout() 只实行 code 一潮。如果要是反复调用,请用
setInterval() 或者给 code 自身还调用 setTimeout()。

  setTimeout 运用在缓一段时间,再展开某项操作。即以载入后延指定时间后,去实践同一赖表达式,仅执行同样不好。

setTimeout(代码,延迟时间);

拖欠延迟时间并无是公愿意的光阴,不同之浏览器,延迟时间不均等。拿地方例子来拘禁,也就是说延迟时间并无是者的0。对比来拘禁

ECMAScript 15

也就是说setTimeout只实行同样不良,但时空连无是0,具体也小秒延迟,不确定。那么尽管不飞,为什么出现的呢-1了。我们来分析下该次,

当i=3时,while(3)后,i减为2,执行一个setTimeout 

当i=2时,while(2)后,i减ECMAScript为1,执行一个setTimeout

当i=1时,while(0)后,i减为2,执行一个setTimeout

当i=0时,while(0)后,i减为-1,此时次结束,但设置setTimeout的工夫距离
为0 不见面理解 执行之,会插入到线程的施行队列中,等到i

化-1时段,才见面实行前的老三单setTimeout,而此时i已经成-1了,所以,输出为-1.这时候打印的console是事先好console打印出的

    setTimeout是异步代码,也就是说这样勾画setTimeout(fn,
100)并无意味着fn肯定在100毫秒之后立刻就是实行,延迟很可能会见再度丰富。因为兼具的

异步事件(包括计时器、或者一个 XMLHttpRequest
完成)仅仅当程序执行期间有空暇的下才会履,不是公确定了什么时就是什么时候实施。