引入AngularJS 1.5.5至Django项目遇[$injector:modulerr]错误求助
解决AngularJS 1.5.5 [$injector:nomod] 模块'public'不存在的错误
你遇到的这个问题其实很典型——AngularJS启动时发现页面里指定了要加载public模块,但这个模块根本没被定义。结合你说的“负责的页面原本无Angular代码”,大概率是Django的父模板(比如base.html)里已经全局添加了ng-app="public"指令,或者你不小心在当前页面的某个标签上带了这个配置,自己没注意到。
下面给你几个针对性的解决方案,你可以根据实际情况选择:
方案1:移除不需要的ng-app指令
如果你的页面暂时不需要绑定Angular模块,或者打算自己定义新模块,直接找到页面中(包括父模板里)带有ng-app="public"的标签,做以下调整:
- 要么去掉模块名,使用Angular的默认空模块:
ng-app - 要么直接删除整个
ng-app属性,等你准备好自己的模块后再添加
方案2:定义public模块
如果项目里其他页面依赖public模块,或者父模板的配置不能修改,你只需要在引入Angular核心脚本之后,添加一段模块定义代码即可:
<script src="/static/angular/1.5.5/angular.min.js"></script> <!-- 新增这段代码定义public模块 --> <script> // 第二个空数组是模块依赖,暂时不需要依赖就留空 angular.module('public', []); </script>
你也可以把这段代码放到单独的app.js文件里,再通过<script src="/static/js/app.js"></script>引入,这样代码结构更清晰。
额外提醒
在Django模板继承的场景下,一定要注意父模板的全局配置——很多时候父模板会把ng-app加到根标签上,子页面继承后就会自动带上,很容易被忽略。如果父模板的ng-app="public"是给其他页面用的,你可以在当前页面的根标签上重新添加ng-app(不带模块名或者你自己的模块名),覆盖父模板的设置。
我之前在Django+Angular的项目里也踩过这个坑,模板继承的隐式配置真的很容易让人摸不着头脑,希望这些方法能帮你快速解决问题!
内容的提问来源于stack exchange,提问作者Willians Martins
相关产品推荐
相关产品推荐

