【问题标题】:How to call a function from a AngularJS directive with checkbox, when it is checked?选中时如何从带有复选框的AngularJS指令调用函数?
【发布时间】:2016-02-19 13:51:22
【问题描述】:

最近我实现了一个指令,它使用了一个用 css 定制的复选框。选中复选框的值时,我需要从范围调用函数。我有一些与ng-click 合作的东西,但这不是我要寻找的。

我查看了ng-true-value,但它需要一个值,而不是我可以调用的函数。有没有办法解决这个问题,所以只有在复选框处于活动状态时才能调用该函数?这是指令定义:

{
    restrict: 'E',
    replace: true,
    require: ['^ngModel'],
    scope:{ 
            isChecked: '=?', 
            secondFunction: '&'
          },
    template: function (elem, attr){
      var a= '<label class="switch"'+attr.class+'><input type="checkbox" ng-class="{checked: isChecked}"><i></i></label>';
      return a;    
    }, 
} 

Plunk with a directive

【问题讨论】:

  • 你可以看看 $scope.watch $watch(watchExpression, listener, [objectEquality]);注册一个侦听器回调,以在 watchExpression 更改时执行。每次调用 $digest() 时都会调用 watchExpression,并且应该返回将被监视的值。 (watchExpression 在使用相同的输入多次执行时不应更改其值,因为它可能会被 $digest() 执行多次。
  • 根据您的需要,您可以使用ng-change 或简单的$watch 来控制您的逻辑。这可能发生在链接函数中(因为您可以访问范围),但我建议只使用一个控制器来代替指令。
  • 非常感谢您的回复和编辑。正如你建议的那样,我使用了 $watch。还有一个问题是有什么办法可以做到这一点,我把任何功能放在范围内,所以指令可以是通用的吗?比如 ng-click。

标签: javascript angularjs angularjs-directive


【解决方案1】:

在复选框上使用ng-change = 'functionName()'

Reference:

【讨论】:

    【解决方案2】:

    您可以使用 ng-modelwatch 函数来执行检查复选框的逻辑

    $scope.$watch('modelName', function() {
        // do something here
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多