javascript - 如何将变量从 $scope 传递到指令中,然后反向传递?

标签 javascript jquery html angularjs angular-directive

我目前正在尝试实现一个应该使某些 DOM 元素闪烁的指令。为此,我使用 $timeout 将元素的可见性设置为可见或隐藏。我的问题是,如果在 $timeout 调用中我硬编码了一个值(比如“500”),一切都会顺利进行。但是,如果我尝试通过变量传递此参数,我会发现元素闪烁得非常快,就好像没有输入任何参数一样(默认值为“0”)。

HTML

<button class="btn btn-key"><span class="blink" blinkSpeed='500'>Q</span></button>
{{displayBlinkSpeed}}

JS

.directive('blink',function($timeout){
return{
    restrict:'ACE',
    transclude: true,
    scope:{
        blinkSpeed: '='
    },
    link: function(scope,element,attrs){
        function showElement(){             
            var speed = parseInt(scope.blinkSpeed);
            element.css("visibility","visible");
            $timeout(hideElement,speed);
            scope.displayBlinkSpeed = speed;
        }

        function hideElement(){
            var speed = parseInt(scope.blinkSpeed);
            element.css("visibility","hidden");
            $timeout(showElement,speed);
            scope.displayBlinkSpeed = speed;
        }

        showElement();
    },
    template: '<span ng-transclude></span>',
    replace: true
    };
});

此外,我忘了提及 HTML 中的 {{displayBlinkSpeed}} 也没有显示任何内容。 我的猜测是我的指令无法将信息传递(接收/发送)到 DOM。不幸的是,我还没有找到让它工作的方法。我错过/误解了什么吗?

最佳答案

首先,{{displayBlinkSpeed}} 不会显示任何内容,因为 displayBlinkSpeed 仅在指令的隔离范围内定义 - 它是 undefined 在它之外。

至于 blinkSpeed - 当你绑定(bind)到一个属性时,Angular 规范化属性名称,所以 scope: {blinkSpeed: "=" 绑定(bind)到 blink-speed="500" 属性(不是 blinkSpeed="500" 属性)。没有它,$scope.blinkSpeed === undefinedparseInt(undefined) === NaN,这会导致闪烁。

将 HTML 更改为:

<span class="blink" blink-speed='500'>Q</span>

有点跑题了:

1:您不需要执行 parseInt(scope.blinkSpeed),因为 "=" 会正确解析为整数。因此,以下方法同样有效:

$timeout(hideElement, $scope.blinkSpeed);

2:因为您不打算在指令中修改闪烁速度,所以使用 "=" 进行双向绑定(bind)是一种浪费 - 而不是使用使用 "&" 单向绑定(bind)到表达式:

scope: {
  blinkSpeed: "&",
},
link: function(scope){
  var speed = scope.blinkSpeed();
  $timeout(hideElement, speed);
}

关于javascript - 如何将变量从 $scope 传递到指令中,然后反向传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342208/

相关文章:

html - 有时会显示登录表单,有时不会

javascript - 如何将选择元素的 itemindex 设置为 -1?

javascript - Jquery 自定义属性

javascript - Apache 错误 : File name too long: Cannot map GET

javascript - 使用通配符选择自定义值

javascript - jQuery 脚本在 IE 中不起作用?

javascript - 根据同一表行中输入框的最高值查找元素

php - 航点无限滚动仅添加更多数据一次

javascript - 简单扩展原生 JS

html - 如何在 svelte 中将 "href="用于静态 html 文件