Javascript ionic/angular ng click调用错误的函数
如果您登录并注销,下面的代码可以正常工作,但是如果您在登录之后尝试登录,ng click=“login()”将调用logout()函数。DOM已正确更新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
.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}
?