【发布时间】:2015-05-25 10:38:31
【问题描述】:
我正在 Angular 的帮助下编写一个单页应用程序。我以前的经验只是把 JavaScript 混在一起,没有严格的测试或遵守模型。
我编写了一个小型测试应用程序(想象一下类似于 yeoman 待办事项应用程序:http://yeoman.io/codelab.html)。在上述应用中,如果用户尝试添加重复条目,我想抛出一个错误。
所以在 html 文件上我有一个添加按钮:
<button ng-click="addPerson(newPerson)">Add</button>
这会在控制器中运行 addPerson 函数:
$scope.addPerson = function (name) {
try {
$scope.awesomePeople = PeopleListService.addPerson(name);
}
catch(err) {
// do something with err
}
};
依次在服务/工厂中运行适当的功能(将来会从数据库中获取数据——这对我来说只是一个学习过程):
fact.getPeople = function () {
return peopleList;
};
fact.addPerson = function(name) {
if (peopleList.indexOf(name)===-1) {
peopleList.push(name);
return fact.getPeople();
} else {
throw 'Name (' + name + ') already in awesomePeople list';
}
};
这一切都很好而且花花公子。 (这些只是 sn-ps)
我被教导要抛出错误并优雅地捕捉和处理它们。在这种情况下,我想通知用户他们尝试添加副本。
我的问题有点哲学 - 如果我在控制器中显示任何内容(例如,alert(err);,我通过让控制器直接联系用户违反了MVC 模型 - 不?这将耦合控制器到视图/用户界面 - 再次,我不想做的事情。最好简单地从控制器重新抛出错误,然后在 html/视图中捕获它?如果是这样 - 有没有好的方法在角度表达式内?
想法?
我使用以下答案之一进行了深入研究,发现以下链接提供信息: UI Notifications with angular js 并且可以试试这个角度通知插件: https://github.com/Swimlane/angular-notifications
【问题讨论】:
-
MVC 在我看来并不是一个严格的规则,它只是一个关于分离关注点的建议或指导。你不必太担心
violating the MVC model。对我来说,我使用通知服务,它使用一些 js 插件显示 dom 通知。我将插件的功能包装在我的服务中,并在控制器中使用我的服务。这样我就可以轻松地用另一个插件替换插件。希望这会有所帮助。
标签: javascript angularjs model-view-controller