javascript - Angular Directive(指令),与 bool 值的双向数据绑定(bind)只能工作一次

标签 javascript angularjs

尝试测试一个简单的指令,如果传递的值为 true,该指令将运行,但它只能运行一次。

指令:

.directive('myDirective', function(){
        return {
            restrict: 'A',
            scope: {
               triggerObj: '@myDirective'
            },
            link: function (scope, elem, attrs) {
                scope.$watch('triggerObj', function() {
                    alert('success')
                });
            }
        };
    })

Controller :

$scope.triggerObj = {};
$scope.triggerObj.trigger = false;

$scope.passValue = function(){
    //set to true
    $scope.triggerObj.trigger = true;
}

查看:

<div my-directive='{[triggerObj.trigger]}'>
<button type='button' ng-click='passValue()'>click</button>

还尝试在设置为 true 之前将值重置为 false,但仍然只能工作一次。

最佳答案

它只起作用,因为 passValue() 函数将 $scope.triggerObj.trigger 设置为 true。并且您的 $watch 仅当旧值不等于新值时才起作用,但您首先将 $scope.triggerObj.triggerfalse 更改到 true,而所有其他时间都没有任何变化(您只是试图将 $scope.triggerObj.triggertrue 更改为 true 再次)。

要实现这一点,请尝试将 $scope.passValue 函数升级为:

$scope.passValue = function() {
  if($scope.triggerObj.trigger) {
    $scope.triggerObj.trigger = false;
  } else {
    $scope.triggerObj.trigger = true;
  }
}

关于javascript - Angular Directive(指令),与 bool 值的双向数据绑定(bind)只能工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697742/

相关文章:

javascript - 带有长内容的 Angular 注入(inject)页面会使整个页面加载到页面顶部以下,从而切断页面标题

javascript - AngularJs:有状态的客户端路由

javascript - 使用 window.open 创建的文档永远不会达到 "complete"readState

angularjs - ngChange 在 value 超出隔离范围之前触发

javascript - 带有 Razor 表达式的 ng-init

javascript - 语法错误: import declarations may only appear at top level of a module

angularjs - Angular.js - 防止直接访问部分 View

javascript - 缓慢滚动到顶部在 javascript 中不起作用

javascript - 从对象数组中查找并删除对象

javascript - jQuery 验证错误类影响 Select 元素