Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ionic/angular ng click调用错误的函数_Javascript_Angularjs_Ionic - Fatal编程技术网

Javascript ionic/angular ng click调用错误的函数

Javascript ionic/angular ng click调用错误的函数,javascript,angularjs,ionic,Javascript,Angularjs,Ionic,如果您登录并注销,下面的代码可以正常工作,但是如果您在登录之后尝试登录,ng click=“login()”将调用logout()函数。DOM已正确更新 .controller('AppCtrl', function($scope) { function updateMenu(){ $scope.customMenuItems = []; if(loggedin){ $scope.customMenuItems.push({'text':'Login','clic

如果您登录并注销,下面的代码可以正常工作,但是如果您在登录之后尝试登录,ng click=“login()”将调用logout()函数。DOM已正确更新

.controller('AppCtrl', function($scope) {
function updateMenu(){
    $scope.customMenuItems = [];
    if(loggedin){
        $scope.customMenuItems.push({'text':'Login','click':'login()'});
    }else{
        $scope.customMenuItems.push({'text':'Logout','click':'logout()'});
    }
}
updateMenu();

$scope.login(){
loggedin= true; 
updateMenu();
}

$scope.logout(){
loggedin= false;
updateMenu();
}
和menu.html

 <ion-list>
     <ion-item menu-close ng-click="{{item.click}}" ng-repeat="item in customMenuItems track by $index">
         {{item.text}}
     </ion-item>
 </ion-list>

{{item.text}

我认为在绑定数据上以字符串形式传递处理程序不是一个好主意。此外,如果您看到控制台,您将看到解析器错误,因为
ng click
需要一个表达式,而插值的存在将使其成为无效表达式。为了回答这个问题,您可以使用
scope
(与javascript eval不同)的函数,该函数可以根据作用域计算有效的角度表达式,例如:

 ng-click="$eval(item.click)"

<ion-item menu-close ng-click="$eval(item.click)" ng-repeat="item in customMenuItems track by $index">
     {{item.text}}
 </ion-item>

{{item.text}

其他几种可能性:

(1) 由于某些原因,方法名(可能是由于配置工件的约定)可能会干扰触发哪个方法。此外:


(2) 如果混合使用绝对和相对定位,则可以使一个具有透明度的元素与它下面(或旁边)的某个元素重叠。如果它是透明的,它可以完全重叠,同时仍然显示它。

Hmm。。。我不确定将函数名作为字符串传递是否是一种好方法。为什么不在控制器中处理该逻辑?此外,在
ngClick
中不需要双大括号。没有双大括号,它就无法工作。item.click不会被替换。为什么不直接添加正确的函数,
{'text':'Login','click':$scope.Login}