我遇到AngularJS的问题,因为当我在两个模板中重用变量名时会出现问题。我的设置的简化版本如下,在route.js
$routeProvider.when('/a', {
templateUrl: 'a.html'
})
.when('/b', {
templateUrl: 'b.html'
})
每个页面(a.html
和b.html
)都有一个类似的脚本标记
<script type="text/javascript">
let foo = 5;
</script>
还有一个导航菜单,用于在页面之间导航。问题是,当我从一个页面转到另一个页面时,我得到一个错误
Uncaught SyntaxError: Identifier 'foo' has already been declared
我知道我可以更改变量名称,但我想知道为什么会这样,因为我的直觉是它不应该。使用Angular的脚本标签我错了吗?这可能是由其他原因造成的吗?感谢
答案 0 :(得分:2)
下面:
<script type="text/javascript">
let foo = 5;
</script>
您在全局范围内声明变量,当您触发第二个路径时,您将重新声明已在同一范围内的同一变量。
避免使用脚本标记并使用控制器本地范围,在那里声明变量,您不会有任何冲突。
function aController (){
let foo = 5;
}
function bController (){
let foo = 5;
}
或者,如果你想保持脚本块将代码包装在IIFE中,以避免弄乱全局范围。
<script type="text/javascript">
(function(){
let foo = 5;
})()
</script>