AngularJS中的指令实践开发指南(二)(4)

scope.openEditor = function(index) { scope.editMode = true; if (index !== undefined) { scope.noteText = notesFactory.get(index).content; scope.index = index; } else { scope.noteText = undefined; } }; scope.save = function() { if (scope.noteText !== '') { var note = {}; note.title = scope.noteText.length > 10 ? scope.noteText.substring(0, 10) + '. . .' : scope.noteText; note.content = scope.noteText; note.id = scope.index != -1 ? scope.index : localStorage.length; scope.notes = notesFactory.put(note); } scope.restore(); };

这两个函数有几点需要注意:

openEditor 为编辑器做准备工作。如果我们在编辑一个笔记,它会获取当前笔记的内容并且通过使用 ng-bind 将内容更新到可编辑的 div 中。

如果我们在创建一个新的笔记,我们会将 noteText 设置成 undefined,以便当我们在保存笔记的时候,触发相应的监听器。
如果 index 参数是 undefined,它表明用户正在创建一个新的笔记。
save 函数通过使用 notesFactory 来存储笔记。在保存完成后,它会刷新 notes 数组,从而监听器能够监测到笔记列表的变化,来及时更新。
save 函数调用在重置 controllers 之后调用restore(),从而可以从编辑模式进入查看模式。

第五步

在 link 函数执行时,我们初始化 notes 数组,并且为可编辑的 div 框绑定一个 keydown 事件,从而保证我们的 nodeText 模型与 div 中的内容保持同步。我们使用这个 noteText 来保存我们的笔记内容。

var editor = elem.find('#editor'); scope.restore(); // initialize our app controls scope.notes = notesFactory.getAll(); // load notes editor.bind('keyup keydown', function() { scope.noteText = editor.text().trim(); });

第六步

最后,我们在HTML如同使用其他的HTML元素一样使用我们的指令,然后开始做笔记吧。

<h1>The Note Making App</h1> <notepad/>

总结

一个很重要的点需要注意的是,任何使用jQuery能做的事情,我们都能用Angular指令来做到,并且使用更少的代码。所以,在使用jQuery之前,请考虑一下我们能否在不进行DOM操作的情况下以更好的方式来完成任务。试着使用Angular来最小化jQuery的使用吧。

再来看一下我们的笔记本应用,删除笔记的功能被故意漏掉了。鼓励读者们自己实验和实现这个功能。 你可以从GitHub上下到这个Demo的源代码。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgyjyg.html