【发布时间】:2014-05-26 15:29:13
【问题描述】:
自从我接触 AngularJS 以来,这一直是我的问题。
是的,AngularJS 在表示和破坏逻辑之间提供了彻底的分离。然而,我发现自己处于两难境地,有时我真的无法抗拒直接从我的服务中操作一些 DOM 元素的诱惑,这显然不是最佳实践,因为 AngularJS 建议在指令中这样做,我觉得这很累,尤其是在我想创建具有沉浸式体验的应用的情况下。
最近我正在使用 node-webkit 从事一个原生应用程序项目。我们想利用 AngularJS 构建一个带有 HTML5 和 Node.js 的多文档应用程序。但我无法找到实现这一目标的方法。就我而言,即使是嵌套视图也不容易创建,也不推荐使用 AngularJS,更不用说多窗口了。
与此同时,我发现 Backbone 在这方面非常令人满意。但是,出于其他原因,我仍然更喜欢 AngularJS。
那你怎么看?这个问题有什么解决办法吗?那里有任何开源项目吗?代码示例也非常感谢。提前谢谢。
【问题讨论】:
-
当你说通过指令操作 DOM 很累时,你能详细说明一下吗(我个人觉得更容易和“安全”)?您能否向我们展示一个具体的示例,以便我们理解您为什么觉得它令人生畏?
-
@AntónioSérgioSimões 说,为了与 AngularJS 进行对话,我需要创建一个指令。首先,如果对话框包含根据用户的实时输入而更改的动态 DOM,我发现指令没有多大用处(我很保守,所以我仍然会选择用指令包装它,但这不是拖累吗?);相反,我发现直接使用 jQuery 更加灵活和简洁。其次,为了符合语义规则,在 HTML 文档中放置一个对话框而不是动态附加它不是一个好习惯。根据您的意见,我应该在哪里解决这个问题?Thx
-
您仍然可以在指令中使用纯 jQuery,另外还可以直接引用要附加新 HTML 的元素,而不是执行 DOM 查询。
-
补充一点,有时我发现做一些“肮脏”的 DOM 事情是不可避免的,这些事情不符合最佳实践,例如。 window.onscroll = 函数(){}。你觉得我应该把它放在哪里?我应该为此创建一个指令并将其附加到根元素,还是应该为这类事情创建一个单独的“dirty.js”?对于后者,访问 $scope; 会有问题。然而,对于前者,该指令似乎有点不必要。
-
引用:“即使是嵌套视图也不容易创建,也不推荐使用 AngularJS” 你检查过 Angular UI-Router 吗? github.com/angular-ui/ui-router 我建议查看页面底部的视频,它们很好地展示了如何创建具有多个相互独立的部分的嵌套视图。希望这会有所帮助
标签: javascript html angularjs backbone.js node-webkit