全面披露,对Angular和Ionic来说是全新的,我正在尝试从概念上理解它,并了解最佳实践,这样我就不会再遇到麻烦了。
我已经构建了基于vanilla html/css/js的网站和应用程序,并为应用程序UI提供了node.js后端和jquery mobile。
在那些需要web服务/后端的情况下,我主要使用.ejs文件和部分视图,并使用res.render响应(动态地将数据传递到视图中)为它们提供服务,比如。。。
app.get('/showallcustomers', function(req, res){
db.connect("SELECT * from customers", [], function(result, error){
var data = result.rows;
res.render('pages/showall', {data:data})
});
});
同时将S3用于我的静态JS/CSS/Images等,以减轻node.JS web服务上关于静态资源的负载。
通过ajax发出的其他请求只需从node.js服务器发送/接收json即可。
现在,有了angular js和关注点的分离,视图与控制器和数据分离,我正试图找出"托管"或服务于我的视图和控制器的最佳位置。
在与cordova捆绑的应用程序的情况下,我可以很容易地将所有这些角度视图/控制器保留在应用程序的根www文件夹中,并将它们与应用程序打包(有点像jQuery mobile的巨大"页面"驱动的index.html文件),但我是否可以使用类似S3的cdn来处理我的"静态"文件,如angular view.html文件和controller.js文件?或者甚至是更传统的静态文件的网络托管类型设置?
然后,我可以(大概是?)(使用$http模块)将我的站点/应用程序的"数据"流限制为mysite.com/api类型设置?类似于:
app.config(function($routeProvider){
$routeProvider
.when('/',{
controller: 'customersController',
templateUrl: 'app/views/customers.html'
})
在控制器中,类似于。。。
$http.get('api/customers');
但是,如果是这种情况,并且我以这种方式提供静态文件,routeProvider如何知道在哪里可以找到控制器?
这里的人们通常做什么?将静态文件与动态数据完全分离?还是把它们捆在一起?有正确的方法吗?还是我在概念上误解了什么?
假设:
- 我对Cordova不太熟悉,但我认为它会像高级浏览器扩展一样工作
- 我还假设您的应用程序获得了足够的流量,从而减轻服务文件的负载并不是一种过度的做法
想法:
- 对于JS文件,绑定可能是个好主意。无论您的服务器是提供文件还是S3提供文件,它都将最大限度地减少浏览器必须进行的连接量
- 对于JS文件,由于它们很可能通过
<script>
标签包含在文件中,因此您可以简单地将它们上传到S3中。这不应该给你带来太大的问题 - 对于HTML模板文件,我相信您也可以这样做。使用
RouteProvider
和ng-include
,您应该能够从S3中获取它们 - 此外,如果您正在执行API调用,那么使用角度服务将比在控制器中使用
$http
模块更好
希望这些帮助。