javascript - 如何在 Angular Directive(指令)中使用回调作为监视表达式?

标签 javascript angularjs angularjs-directive

我想在我的 Angular context-menu 指令中使用回调函数来触发 watch 。不幸的是,监视表达式从未被评估。

有什么想法缺少什么吗?

完整源代码请参见 http://plnkr.co/edit/PAjuvztuM8vlZ1U54XSy .

指令:

    app.directive("contextMenu", function($log) {
      return {
        restrict: 'A',
        scope: false,
        link: function(scope, iElement, iAttrs, controller) {
          scope.$watch(
            function() { return scope.$eval(iAttrs.openOnTrigger); },
            function() { $log.debug('context-menu check open:', scope.$eval(iAttrs.openOnTrigger))}
          )
        }
      };
    });

最佳答案

watch 未被评估,因为没有任何东西触发评估它的摘要周期。因为您使用 JQuery 绑定(bind)点击事件,所以 Angular 并不真正了解它们。在这种情况下,您需要使用 $apply ( https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$apply ) 手动触发摘要周期

例如:

scope.$apply(function() {
    scope.onRightClick();
 })

修改后的 Plunker:http://plnkr.co/edit/vELZQbBLOTv4Z5YdfH7K

关于javascript - 如何在 Angular Directive(指令)中使用回调作为监视表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38967163/

相关文章:

javascript - 如何限制 forEach 循环仅迭代 16 次

javascript - javascript 连续字符串

python - Web应用架构: Putting python in a MEAN stack app

html - 如何将输入文本和 ngMessage 放入指令 templateUrl 中?是否可以?

javascript - 为什么我的全局变量不在函数之间携带其值

javascript - 如何从字符串、html输入提交中提取期望值

Javascript:显示单个数据而不是一行中的多个数据

angularjs - 在 AngularJS 应用程序中集成 Google Adsense

angularjs:将焦点设置在指令内先前隐藏的输入元素上

除非清除模型,否则在指令内更新模型时,Angularjs 表单 $error 不会更新