AngularJs定制样式插入到ueditor中的难点总括

 

 

 
 计算一下团结给编辑器定制样式的进度中所遇到的难点,首要是编辑器的2次开发接口,以及用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来控制交互。大家来看望怎么写:
 

图片 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>

图片 2

js里面包车型大巴代码如下:

图片 3

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

图片 4

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

图片 5

体制写好以往正是插入到编辑器中,那么什么样插入呢?那里有二种,直接插,和基于查找之后的稿子进行插队。直接插入的话比较简单。

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

安排之后的效益如下:

图片 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 } }); } }; });

   
 那里我们证明了Article瑟维斯,并给它回到了api数据,那么我们将该正视注入要调用的页面即可调用其情势。依旧看下代码:通平常服装务调用

API重返的数额放在一个文书夹里面而控制数据的控制器单独放在贰个文本夹里面,那么大家来看下控制器里是怎么样回调api的多寡。

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

专注,你供给把Article瑟维斯注入到控制器里面,然后才能回调数据。怎么回调数据吧?看上面包车型客车代码:

图片 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);
            });          
      },
  };

图片 8

OK,大家成功的回调到了函数数据。关于寻找部分,上面总括下不亮堂的知识点。

  总括知识点

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

图片 9

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

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

符串将替换文本使用。function回调函数再次回到的首先个参数表示万分到的字符,第3个以及未来都以同盟到的分组数据。来看下代码。

图片 10

 

3.关于[p.slice(0,index)][p.slice(index+1)]是怎样鬼?调节和测试一下就精通了。

图片 11

 再来看待合成代码就理解了何等看头。

图片 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]);
              }
      }); 
});

图片 13

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

图片 14

  为何输出的是-1吗?大家先来看下原理setTimeout() 

  setTimeout() 只进行 code 3回。尽管要频仍调用,请使用
setInterval() 恐怕让 code 本人再一次调用 setTimeout()。

  setTimeout 运用在延迟一段时间,再实行某项操作。即在载入后推移钦点时间后,去执行1遍表明式,仅执行贰次。

setTimeout(代码,延迟时间);

该延迟时间并不是你指望的时光,不一致的浏览器,延迟时间区别。拿地方例子来看,约等于说延迟时间并不是上边包车型地铁0。比较来看

图片 15

也正是说setTimeout只实行3遍,但时间并不是0,具体为多少秒延迟,不显著。那么就平常,为啥出现的为-1了。大家来分析下该程序,

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

当i=2时,while(2)后,i减为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是异步代码,也正是说这样写set提姆eout(fn,
100)并不意味fn肯定在100飞秒之后立刻就推行,延迟很可能会更长。因为拥有的

异步事件(包涵计时器、大概三个 XMLHttpRequest
完毕)仅仅当程序执行时期有空余的时候才会实施,不是你规定了什么日期就怎么样时候实施。