在调用事件取消后,我正在努力停止评估表达式的其余部分的ng-click。
我做了以下plnkr。
如果单击“Click me”文本,您将看到值正在变化,尽管clickMe函数正在调用所有已知方法(至少由我来)以停止事件。
标记:
<body ng-controller="Home" ng-init="model = { value: false }">
<div ng-click="clickMe($event); model.value = true;">Click me!!</div>
{{ model.value }}
</body>
应用:
APP.controller('Home', function($scope){
$scope.clickMe = function($event){
$event.stopPropagation();
$event.preventDefault();
return false;
}
})
我知道我可以将参数传递给clickMe函数,如果“isOK”为false,则更新我需要的内容,但由于很多原因绑定到我的应用程序,我尽量不这样做。
在我的应用程序中,我在ng-click
上有类似的内容model.PS.title = value; model.PS.desc = value2; model.PS.isSce = value3
我是瞎子,我看不出我能这么简单:
model.PS = { title: value, desc: value2, isSce: value3 }
...在这种情况下,我可以使用像@Emmanuel所提到的if语句的简写表达式。
我在想,ngClick会像函数块一样评估其中的表达式,所以如果遇到return false
(或类似的东西),它就会停在那里。
答案 0 :(得分:1)
使用$scope.$eval
运行点击处理程序后,您可以评估表达式。
您可以将点击有效后要运行的表达式传递给点击处理程序,并根据isOK
变量评估表达式。
我已经扩展了一些演示,以显示$eval
的功能。
请找到更新的plunkr here。
<强> HTML 强>
<body ng-controller="Home" ng-init="model = { value: false }; model2 = {value:true}">
<div ng-click="clickMe($event, 'model.value = true; model2.value = false;');">Click me!!</div>
{{ model.value }}
{{ model2.value }}
<br/>
check to enable click me!
<input type="checkbox" ng-model='isOK'/>
</body>
<强> JS 强>
var APP = angular.module('myApp', []);
APP.controller('Home', function($scope){
//var isOk = true;
$scope.isOK = false;
$scope.clickMe = function($event, args){
if($scope.isOK){
console.log(args);
$scope.$eval(args);
return false;
} else {
console.log('isOk false:', args);
}
}
});
答案 1 :(得分:0)
怎么样
<body ng-controller="Home" ng-init="model = { value: false }">
<div ng-click="model.value = clickMe($event) ? true : model.value;">Click me!!</div>
{{ model.value }}
</body>
按原样保留应用
APP.controller('Home', function($scope){
$scope.clickMe = function($event){
$event.stopPropagation();
$event.preventDefault();
return false;
}
})