Javascript 重新启动/重新加载应用程序
我正在和Yii2和Angular一起做一个项目。守则的结构如下:Javascript 重新启动/重新加载应用程序,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我正在和Yii2和Angular一起做一个项目。守则的结构如下: <html ng-app="myApp"> <head.../> <body> ... <div class="body-content"> MAIN CONTENT GOES HERE </div> ... </body> </html> ... 主要内容在这里 ..
<html ng-app="myApp">
<head.../>
<body>
...
<div class="body-content"> MAIN CONTENT GOES HERE </div>
...
</body>
</html>
...
主要内容在这里
...
页面左侧包含一个标题和一列,以及一个在.body content
div中呈现的中心区域。现在,正如您所想象的,我在其中有一些按钮,一些其他角度小部件,等等
Yii2有一个非常酷的功能,名为renderPartial
,它将重新渲染视图文件,而无需在
和
中再次包装它。我使用它来更新我的主要区域的内容,方法是调用该函数,用jQuery获取响应并替换内容
现在,这会导致所有绑定了Angular的按钮停止工作(我猜是为什么)。我的问题是:如何使Angular重新运行或将所有(新)DOM元素重新绑定到它们的操作?对于Angular,您必须使用手动引导方式(在中解释),但这样做会随着时间的推移导致内存泄漏,因为Angular add listener位于您破坏的DOM上,并且不知道它被删除,所以它们会保留,控制器/指令/绑定和代码引用的其他特性也是如此
Yi2是否可以包装成一个角度指令?我不确定是否正确-您使用前端框架和后端框架来控制前端,后者提供您注入HTML的新DOM内容 据我所知,Angular最适合在获取数据的同时处理一切(无论是从JSON或您选择的其他格式的后端),而不是新的DOM元素 Angular本身绑定到它添加到的任何DOM节点,处理内容和依赖项注入,从而显示数据。在您的例子中,后端PHP框架似乎提供了新的DOM元素,Angular认为“嘿,你不想让我添加它们吗?好吧,那么我不想添加。”然后中断 也许这个特定案例有解决方案,但如果我是你,我会重新思考这个概念,使用两种不同的框架,更不用说语言,“我希望我的视图/模板呈现在哪里?整体的哪个部分负责什么?”,做同样的工作,互相干涉会把事情搞得一团糟,我不想去收拾
所以,如果你喜欢这个Yii2特性,并且想让它工作起来,很好——但是在这种情况下——你需要什么呢?如果你想坚持使用Angular,你只需要有一个后端来处理数据,并将其交回前端来完成它的工作。@adt No。我不会因为Angular无法重新加载自身而重新编写Yii提供给我的所有小部件。我真的不确定这会如何工作。是的,我可以在指令中包装我想要的任何东西,但那会有什么作用呢?或者你的意思是将
正文内容的整个内容包装在一个指令中?我对yii2框架知之甚少,但我假设它是一个javascript库,您可以使用某种模板指定要呈现的内容,您可以注册一个以角度替换正文内容的指令,并使用yii2框架与普通框架一样,您可以像中所解释的那样重新启动angular指令,angular将负责分析html属性,并发挥其神奇作用。@VladTheLad感谢您注意到yii2是一个后端渲染框架,这比我预期的更矛盾。最好选择一个或另一个,否则你将走一条非常困难的道路,使这项工作。也许Yii2可以呈现应用程序中使用的角度模板。我使用Yii2处理大多数内容,使用角度模板处理一些边缘情况,在这些情况下,使用角度模板比使用Yii2更容易控制用户。我这么做是因为它更快更容易(别忘了Angular仍然是DIY,有很多指令,而Yi2有很多现成的东西)。Mh,我仍然很确定没有Angular你会更好(据我所知,React可能是你的最佳人选,但还没有使用过它)在这种情况下——如果您寻求的是输入控制,那么成熟的MVVC可能不是最佳选择