我是Angular的新人。我在AngularJS中有搜索引擎的Web应用程序。我在后端(PHP)中准备JSON,然后在Angular应用程序中使用它。
我很好奇是什么样的JSON加载到AngularJS更好?为什么?
现在我在Controller中创建JSON,然后在<script>
标记的视图中显示它:
<script>
var json = [json_variable]
</script>
JS文件我在DOM文档的末尾附加到我的项目,所以一切都很好。
在AngularJS中,我通过fromJson方法加载此变量
$scope.hotels = angular.fromJson(json);
这种方法错了吗?如果是这样,为什么?然后我使用这个JSON来显示ng-repeat中的项目。
我应该在后端使用自己的URL创建单独的控制器并在那里准备JSON吗?然后,通过AJAX和AngularJS中的http请求加载JSON?
答案 0 :(得分:1)
第一个策略使全局变量'json'。
在窗口关闭或显式删除之前,它会重新占用内存。这是件坏事。不要制作全局变量。它有spagetti代码的主要部分。那边没有背景。如果更改某些“ng-model值”,则视图不会更改。 virw不知道这件事。
您应该在角度上下文中加载数据。
$http.get('path/to/json')
.then(function (res) {
// do something is here
// parse json or change model
});
如果您的服务器遵循REST API,则角度资源也是一种好方法。
答案 1 :(得分:1)
所以最正确的方法,如果有任何可能是在控制器中发出http请求,但你正在尝试的有它的优点,评论是一种片面的,所以让我给出另一个视角。
Http请求
如果您使用http请求获取数据,则在加载窗口和数据请求完成之间会有一段时间。这将使视图增长,您需要处理加载。在时间问题上,对数据有额外的http请求会产生一些开销,但这并不明显。在我的经验中,这种方法最糟糕的部分是SEO。据说谷歌应该能够处理javascript(Source),但我有一些网站不是这样的。
这种方法的最佳理由是角度方式,它几乎没有任何成本,非常容易,它甚至可以异步完成,让用户感觉快速加载页面!
视野中提供的JSON
首先让我先从一些优势开始。首先,当加载视图时,数据准备就绪,这也可以以更有角度的方式实现,但是就这一点而言,这是一个收益。另一个好处是使用旅游数据库进行优化。在某些情况下,您可以打开与数据库的连接,这可以在您完成时获取JSON数据。如果数据的初始加载量超过2-3秒,那么我在使用Google抓取工具时无法“等待”数据。一个好/坏的事情是你的页面加载速度较慢,不会增长,数据对用户来说似乎是即时的。这一点是您的网站所针对的风格问题。
我偶尔使用它的另一个用例是将CMS内容节点放入角度。 Ex可以进行极快的语言更改(非常简洁的用例)。
问题:这不是有角度的方式(当我说这个时,我的意思是,在网络上没有太多帮助,你的代码似乎会让外人感到困惑)并且它更难。所以你不应该像你建议的那样做:
<script>
var json = [json_variable]
</script>
不要将其保存为全局变量,并且会出现一些时序问题。您无法确定脚本是否在控制器之前加载,以及控制器是否依赖于您有时间问题的值。额外你自己依靠jQuery加载脚本,你可以解决这个问题,但它有很多互联网搜索和额外的代码。 您可以使用ngInit解决此问题:
<div ng-init="controllersInitFunction(json)">
...
</div>
Angular会理解对象,你可以控制时间。
我只是想说其他人可能已经说过并不是很清楚。我自己使用角度方式,因为它更容易,引入新的开发人员不会让他太困惑,但这不是唯一的方法。
Sry for the text of wall。