在指令的链接函数中修改事件中的范围变量
Modifying scope variables in an event in a directive's link function
我在指令的链接函数中的元素上有一个jQuery事件。 我想修改该事件回调中的范围变量。 它不起作用 - 呈现该变量的模板永远不会更新:
joyableApp.directive('foobar', [function() {
var FoobarLink = function(scope, element, attrs){
scope.foo = 'bar';
element.click(function(){
console.log("clicked!");
scope.foo = 'clicked_result';
});
};
return {
template: '<div>foo = {{foo}}</div>',
scope: {},
link: FoobarLink
}
}]);
在此示例中,我尝试在单击指令元素时更新scope.foo
。 但是,当我运行它并单击元素时,模板不会从bar
更新到 clicked_result
. 我怀疑我错过了一些关于link
和scope
如何在这里工作的基本知识。
一些不相关的背景故事,以防万一有帮助:我正在尝试创建一个可以在<input>
领域使用的指令。 当您专注于此输入字段时,它将显示弹出工具提示。 因此,使用该指令的界面看起来像<input input-tooltip content=‘some tooltip content here’>
。 但是,为此,我需要指令来侦听根元素以获取focus
事件。 我能找到的唯一方法是在传递给链接函数的元素上使用 jQuery 事件。 但是,在该事件的焦点事件的回调中,我似乎无法成功修改范围变量。
$scope.foo
在Angular 进入摘要循环(即所谓的 dirty check
)之前不会刷新。在指令中,您需要自己手动触发摘要循环,如下所示
scope.$apply(function () {
scope.foo = 'clicked_result';
});
但是您可能会遇到Error: $digest already in progress
,因此最好使用evalAsync
或applyAsync
来触发安全的消化周期,例如
scope.$evalAsync(function () {
scope.foo = 'clicked_result';
});
DOM 操作包装在$timeout中。
element.click(function(){
console.log("clicked!");
$timeout(function () {
scope.foo = 'clicked_result';
},0);
});
$timeout将导致安全消化周期开始。不要忘记注射$timeout:
joyableApp.directive('foobar', ['$timeout', function($timeout) {
希望这有帮助。
element.click(function(){
console.log("clicked!");
scope.$apply(function () {
scope.foo = 'clicked_result';
});
});
在这里使用$apply是合适的,不需要注射$timeout。 根据我的经验,$timeout仅在您在链接函数中修改 DOM 并且需要等待 angular 编译添加的元素的情况下才有用。
- 导航到特定事件的另一个变量页面
- 如何在kinetic.js中向函数和事件名称中添加可计数变量
- Javascript:OnChange事件,将数组变量传递给另一个函数
- 缓存事件的变量而不使其全局化
- 将变量传递到keyup事件内部
- 如何将事件处理程序存储在变量中,并在以后将其绑定到对象
- 存储一个事件处理程序中的变量以供另一个事件处理器使用
- Javascript:附加字符串中的事件,闭包中的变量求值
- 如何在函数内部定义一个变量以供事件调用
- 如何将两个事件的变量组合为一,作为两者的总和.jquery
- 如何将更改事件处理程序附加到变量
- 检索在onchange javascript事件中创建的javascript变量
- innerHTML在onClick事件中将变量作为参数传递
- 变量不可用于子代函数,涉及事件
- JavaScript变量在第二次单击事件时间后取消设置
- 如何在动态生成的链接的onClick事件的函数中传递JavaScript变量
- 在事件发生后更改变量的值
- 跨多个 jQuery 脚本的变量/事件
- JS变量事件?比如onChange
- Wavemaker 7中的服务变量事件