我遇到Angular的问题,当我调用ng-show的函数来隐藏/显示一个元素时,我传递给它的参数是从函数中未定义的。
我不知道是不是因为我使用PHP来打印HTML,但我对它非常怀疑。我没有其他选择,只能使用它。
可能是什么原因导致它未定义?
<div ng-app="App">
<div ng-controller="MyCtrl">
...
<?php
...
echo '<li ng-show="toggle(' .$type . ')"></li>' //$type is not undefined
...
?>
...
</div>
</div>
JS:
app.controller('MyCtrl', function($scope) {
$scope.toggle = function(type){
console.log(type); //undefined
...
}
});
如果需要,我可以提供更多信息。
答案 0 :(得分:2)
如果目标是将文字字符串传递给切换函数,那么您忘记在$ type周围添加引号:
echo '<li ng-show="toggle(\'' .$type . '\')"></li>'
因此,如果PHP变量$type
的值为'hello',则生成的HTML代码将为
<li ng-show="toggle('hello')"></li>
如果没有引号,生成的HTML代码将是
<li ng-show="toggle(hello)"></li>
这意味着将使用$scope.hello
作为参数调用JavaScript函数,这可能是未定义的。
答案 1 :(得分:1)
您需要在传递给toggle
函数的值周围添加引号。如果不这样做,那么Angular会尝试将PHP $type
变量的值解析为控制器作用域上的变量undefined
,因为它不存在:
<div ng-app="App">
<div ng-controller="MyCtrl">
...
<?php
...
echo '<li ng-show="toggle(\"' .$type . '\")"></li>' //$type is not undefined
...
?>
...
</div>
</div>