双角绑定ngjs中的ng-click指令

时间:2017-07-13 06:46:40

标签: angularjs angularjs-scope angularjs-ng-click two-way-binding

我在两个元素中调用了一个函数。当我触发该函数一个on-click事件时,它也应再次被命中,无论我在哪里调用该函数。

// 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之类的工作相同?

1 个答案:

答案 0 :(得分:3)

你正在犯这个错误。

角度指令适用于角度表达式,这意味着无论您插入到角度表达式中, ng-show是使用$parse(expr)($scope)执行的 - 这是短版本。因此,如果表达式包含函数调用,则只要指令决定执行表达式,就会调用该函数。在ng-show的情况下,这发生在每个摘要周期。如果ng-click发生在click事件上。

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

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

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

您所要求的不能完成。 Angular并没有这样做。您使用

说明的解决方案
  

我可以使用范围对象来显示|隐藏p标签。但这不是我的问题。

是您最好的选择。