AngularJS
新项目吗? 正确…就像我们中的任何一个新事物的时候,当我们有这些成堆的旧应用程序我们负责维护。 然而,如果我们可以使用AngularJS 新 工作,迁移,是的! 这听起来像一个计划。
网站框架迁移就这样开始了。 我有legacy-ish应用程序(使用主要是jQuery编写),我想更新的新热点,所以我开始潜水。 我学到了角是如何工作的,控制器,将它们附加到DOM,使用循环,使用模型,服务,即。 ,所有的JavaScript使用角你需要知道的东西。 问题是,我的应用程序是用PHP编写的依赖jQuery,和事物的表现只是一个 小 一些纯jQuery和AngularJS之间的不同。
背景
我迁移的应用程序不是超级老。 这是一个单页面应用程序利用jQuery调用:
$.get(); $.post(); $("#container").load(<url>);取代了。 加载的话是非常容易的。 这几乎是直接替代AngularJS如何结合DOM元素。 而不是jQuery调用服务器的HTML容器,AngularJS现在打电话回家代表数据的JSON对象,并把它放在适当的位置在HTML模板(很多关于它是如何工作的信息在线)。
然而,获得数据并替换$.get()和$.post()函数将被证明是更加困难。 AngularJS有自己的口味的这些功能:$ html.get html.post美元()和()。 虽然被称为jQuery等价物以类似的方式,他们的行为不同。 同样,如果你不使用AngularJS的函数,它更新DOM的魔力。 你可以绕过它,但是为什么黑客是一件好事吗?
问题
当您使用$ . GET()和$ . POST(),发送的数据打包好,整洁的GET和POST变量。 PHP高兴地公开这些为你消费,这是大多数应用程序编写(包括我的遗留应用程序)。 与AngularJS POST变量转换为一个JSON对象,就送到身体的PHP——彻底混淆。 没有任何帖子var,应用程序端点希望他们失败…失败很困难。
起先我不知道发生了什么,但是一旦我做了,我发现一个相当聪明的修复(避免大规模重构)。
修复
解决办法很简单如果你有一个合适的面向对象的应用程序。 我们的想法是,你首先需要在某个地方钩你的电话和地方的代码来返工的事情AngularJS发布您的应用程序所期待的。 一旦你找到理想的地点,把这个:
//add support for angularJS posting of JSON if ($_SERVER["REQUEST_METHOD"] == "POST" && empty($_POST)){ $decoded = json_decode(file_get_contents('php://input'), true); if($decoded != null){ $_POST = $decoded; } }这段代码所做的是检查当前请求是一个职位,如果没有$ _POST数据(不会有AngularJS调用),解码消息体,并将其分配给变量$ _POST如果解码。
本文转载自:合肥网站建设