angularjs 中 ng-click 指令的两种绑定方式

Two way binding for ng-click directive in angularjs

我在两个元素中调用了一个函数。当我触发一个点击事件的函数时,无论我在哪里调用该函数,它都应该被再次点击。

//html

<button type="button" ng-click="{{myFunction()}}">click Me !!</button>
  <p ng-show="{{myFunction()}}">{{name}}</p>

//控制器

myApp.controller('myController', function ($scope) {
  $scope.name = 'Helow World!';
  $scope.myFunction = function(){
    return true;
  };
});

我还尝试使用 "" 而不是 {{}} 进行 双向绑定

  <button type="button" ng-click="myFunction()">click Me !!</button>
  <p ng-show="myFunction()">{{name}}</p>

问题:

函数只会触发一次。显示我的p标签不显示。

解决方案

我可以将范围对象用于 Show|hide p 标记。但这不是我的问题。

问题

我的问题是,如何为 event(ng-click) 实现双向绑定,与 angularjs 中的 ng-repeat,ng-model,mg-show,etc 一样?

你想错了。

angular 指令与 angular 表达式一起使用,这意味着无论您插入什么,例如ng-show 使用 $parse(expr)($scope) 执行 - 这是简短版本。因此,如果您的表达式包含函数调用,则只要指令决定执行该表达式,就会调用该函数。在 ng-show 的情况下,每个摘要周期都会发生这种情况。在 ng-click 的情况下发生在点击事件上。

所以当您使用这样的代码时:ng-show="myFunc()" 并且您的函数定义如下:

$scope.myFunc = function() { return true; };

然后在每个摘要上执行此函数,然后 returns true 到 ng-show。它与 ng-click 指令中发生的事情没有任何关系。

您所要求的无法完成。 Angular 只是行不通。您用

陈述的解决方案

I can use a scope object to Show|hide the p tag. But that's not my question.

是您最好且唯一的选择。