Angular - 从ng-show调用函数并将参数传递给它时 - 参数变为未定义

时间:2015-07-21 18:19:53

标签: angularjs ng-show

我遇到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
...

}

});

如果需要,我可以提供更多信息。

2 个答案:

答案 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>