自己动手制作更好用的markdown编辑器-03
上一篇我们实现了文件的新建,保存,打开功能.
在这篇里我们将实现以下功能:
- 系统模块,包含一些软件的设置和存储功能
- 记录上次打开的文件
- 编辑器样式选择
系统模块
跟之前的studio模块类似,我们在modules模块下增加system目录.
比studio多了model.js文件,用来实现系统模块的一些功能.
在app.js里加载system模块
1 |
angular.module('hmd', ['ui.router','hmd.directives','hmd.studio','hmd.system'])
|
路由、导航栏angular.js用得不熟,导航栏的状态根据route来切换一直不知道怎么实现比较优雅.
我直接在app.js里增加了一个导航栏切换的方法,每个route的onEnter事件里自行调用这个方法.
1 |
//TODO:更优雅的导航栏切换逻辑 |
system/route.js
1 |
hmd.system.config(function ($stateProvider, $urlRouterProvider) {
|
studio/route.js
1 |
... |
然后在index.html里配置好导航
1 |
... |
导航栏最终效果:
记录上次打开的文件
每次打开文件都会被记住,下次重新启动程序时将默认打开最后一次打开的文件.
system设置的读取和保存
我们先在system/model.js实现保存和读取设置的功能.
1 |
var util = require('./helpers/util'),
|
system实现了get和save方法,所有的设置都存储在一个简单的对象里,代码里并没有对这个对象做缓存,每次都是从文件里读取,因为这简单的文件还远达不到影响读取速度的情况.
然后我们修改editor的setFile方法,暴露setFiled事件给外部使用.
1 |
//设置当前文件 |
最后修改studio/directives.js的hmdEditor,实现这个功能.
1 |
studio.directive('hmdEditor', function () {
|
编辑器样式选择
样式修改表单
样式文件在目录app/lib/codemirror/theme.
目录里每一个样式文件代表一种编辑器样式,还记得当初实现editor的init时,样式已经是通过配置传入的.
1 |
... |
现在我们只要把theme参数存储到配置里,并提供给用户修改就可以.
在system/model.js里的默认配置增加一个theme字段.
1 |
... |
修改system/views/system.html模版,增加样式表单
1 |
<div class="content studio-wrap"> |
这里的select控件我们先写了3个选项.现在先实现这个修改样式的功能,等完成这个功能后再把选项列表做成自动生成.
对应的system/controllers.js(开发了3天了,终于第一次用到controller了)
1 |
system.controller('system', function ($scope) {
|
controller里读取system的数据,并赋值给$scope.systemSetting,用于表单的数据绑定.由于angular实现了数据的双向绑定,因此用户编辑表单时,绑定的数据也会跟着更新.这样我们的save方法里只要将表单绑定的数据保存回system即可.
button按钮绑定save方法ng-click="save(systemSetting)".
这里可以稍微感受到angular让我们节省了很多工作量.
自动生成select列表
修改controller
1 |
var system = hmd.system, |
从theme目录里读取所有样式列表,生成键值对,然后赋值给$scope.themes
修改视图模版:
1 |
<select name="theme" ng-model="systemSetting.theme" ng-options="k as v for (k, v) in themes"> |
ng-options="k as v for (k, v) in themes"是angular的绑定语法
这样我们就实现了样式列表的自动读取,用户如果想自定义样式,只要在app/lib/codemirror/theme目录新增一个样式文件,并写上自己的样式就可以在系统设置里选择自定义的样式了.
总结
今天实现了记忆最后一次打开的文件以及样式选择的功能,并且第一次使用了angular的controller,感受到了angular双向数据绑定的强大.
我们的程序又更好用一些了(但是随着界面变多,又更丑了,太为难了).
最终效果截图
附件
自己动手制作更好用的markdown编辑器-03的更多相关文章
- 自己动手制作更好用的markdown编辑器-01
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im 文章目录 1. 简介 2. 项目结构 3. 程序主界面 4. 拖动窗口 5. app ...
- 自己动手制作更好用的markdown编辑器-02
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im 文章目录 1. 工具条 1.1. 样式 1.2. 工具条截图 2. 状态栏消息 3. 文件 ...
- 自己动手开发更好用的markdown编辑器-04(实时预览)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/ 程序打包 文章目录 1. 打开新窗口 ...
- 自己动手开发更好用的markdown编辑器-07(扩展语法)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/05/19/hexomd-07/ 文章目录 1. 准备工作 2. 目录语法 ...
- 自己动手开发更好用的markdown编辑器-06(自动更新)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/05/12/hexomd-06/ 文章目录 1. 自动更新方案 2. 实现 ...
- 自己动手开发更好用的markdown编辑器-05(粘贴上传图片)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/28/hexomd-05/ 文章目录 1. 七牛云存储 1.1. 系统 ...
- 任由文字肆意流淌,更自由的开源 Markdown 编辑器
对于创作平台来说内容编辑器是十分重要的功能,强大的编辑器可以让创作者专注于创作"笔"下生花.而最好取悦程序员创作者的方法之一就是支持 Markdown 写作,因为大多数程序员都是用 ...
- 市面上有没有靠谱的PM2.5检测仪?如何自己动手制作PM2.5检测仪
市面上能买到的11中常见的pm2.5检测仪 网上大佬实测并不是很准,我这里没测过(全买下来有点贵,贫穷限制了我的想象力) 这些检测仪多数是复合式.多功能的空气质量检测仪.具体就不一一介绍了.这篇文章 ...
- 更轻便的markdown 编辑器Typora
更轻便的markdown 编辑器 Typora 所见即所得的键入方式 https://typora.io 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论.
随机推荐
- 并查集【p1197】[JSOI2008]星球大战
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- 加快Vue项目的开发速度
巧用Webpack Webpack是实现我们前端项目工程化的基础,但其实她的用处远不仅仅如此,我们可以通过Webpack来帮我们做一些自动化的事情.首先我们要了解require.context()这个 ...
- AOJ 2266 Cache Strategy(费用流)
[题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2266 [题目大意] 有M个桶,N个球,球编号为1到N,每个球都有重量 ...
- 【对询问分块】【主席树】bzoj2683 简单题
对操作序列分块,每S次暴力重建主席树. 当S=sqrt(n*log(n))时,复杂度为O(m*sqrt(n*log(n))). 在线的. #include<cstdio> #include ...
- iOS开发 Swift开发数独游戏(五)显示游戏答案
要点是设置好Tag就好,通过代码找到并初始化即可. 1: // 2: // ShowAnswerController.swift 3: // sudoku-v02 4: // 5: // ...
- VMware三种网络模式组网(转)
VMware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开VMware虚拟机,我们可以在选项栏的“编辑”下的 ...
- FindFirstVolume系列函数遍历驱动器,获取驱动器信息
什么是“卷”?卷,又称为“逻辑驱动器”,是 NTFS, FAT32 等文件系统组织结构的最高层.卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相互隔离的存储单元.一个磁盘分区至少包含一个 ...
- Docker实践4: 基于nginx对后端的weblogic负载均衡
为什么要用Nginx(抄了一段) 1.nginx相对于apache的优点: 轻量级,同样起web服务,比apache占用更少的内存及资源 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻 ...
- python中下划线_的用途
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量 ...
- javascript快速入门2--变量,小学生数学与简单的交互
变量 对于变量的理解:变量是数据的代号.如同人的名字一样. var num;//在JavaScript中使用关键字var声明一个变量 在JavaScript中,使用上面的语法,就可以声明一个变量,以便 ...