为什么我的指令的链接函数从未被调用?

2024-03-25

我有这个指令:

    hpDsat.directive('ngElementReady', [function() {
        return {
            restrict: "A",
            link: function($scope, $element, $attributes) {
                // put watches here.
                console.log(" WHAT THE @#%*%$??? ");
                $scope.$eval($attributes.ngElementReady);
            }
        };
    }]);

我从来没有看到过的输出console.log。我声明一个这样的元素:

<div data-ng-element-ready="console.log(' ------------------------------- COMPILED! ')" data-ng-if="analysis.type" data-ng-show="showBasicHtml" data-ng-include="analysis.type+'Content.html'"></div>

是的,我在声明控制器之前声明该指令,在该控制器下div元素存在。元素出现,ngShow 和 ngInclude 工作,加载模板中的任何内容也都工作得很好(更多指令、控制器、{{表达式}} 等)。

如果我用编译函数执行它,则编译函数does工作,但仍然没有链接功能:

    hpDsat.directive('ngElementReady', [function() {
        return {
            restrict: "A",
            compile: function($element, $attributes) {
                console.log("This I do see."); // THIS WORKS!!
                return function($scope) {
                    // put watches here.
                    console.log("But not this. Why???"); // DOESN'T WORK!!
                    $scope.$eval($attributes.ngElementReady);
                };
            }
        };
    }]);

编译函数的console.log工作正常,但返回的链接函数仍然没有被执行。

知道为什么链接函数可能不会被触发吗?


错误可能在其他地方。我尝试过jsfiddle http://jsfiddle.net/egamonal/S53eA/第一个版本有效。

eval()

无论如何,您可能对什么有误解$scope.$eval() does:

$scope.$eval()根据范围评估 angularjs 代码。 JavaScript 的eval()在 angularjs 中运行任意 js 代码的函数是$window.eval()。有关此内容的更多信息,请参见此处:Angular.js:$eval 是如何工作的以及为什么它与普通 eval 不同? https://stackoverflow.com/questions/15671471/angular-js-how-does-eval-work-and-why-is-it-different-from-vanilla-eval

我测试了与控制器隔离的指令:

<div data-ng-element-ready="console.log('COMPILED!')"></div>

和指令:

app.directive('ngElementReady', ['$window', function($window) {
return {
    restrict: "A",
    link: function($scope, $element, $attributes) {
        console.log("Reached the link fn", $attributes);
        $window.eval($attributes.ngElementReady);
    }
};
}]);

我确实得到了“到达链接 fn”的值并且$attributes是正确的:

Reached the link fn Object { $$element={...}, $attr={...},  
ngElementReady="console.log('COMPILED!')", more...}

And $window.eval()回报COMPILED!

and here http://jsfiddle.net/egamonal/S53eA/1/带控制器。

无论如何,使用eval()执行在属性中编写的代码看起来很危险。任何人都可以修改 DOM 来运行代码。至少确保它不会影响任何其他用户或服务器端。

使用 ng-if 重现问题

第一条评论后编辑: 我尝试使 ng-if 表达式计算结果为 falsehere http://jsfiddle.net/egamonal/S53eA/2/这次没有显示该消息。 这可能会发生,因为为了评估 ng-if,yuo 必须首先编译该指令。否则,这只是 anuglarjs 不知道的代码。但是,由于它已从 DOM 中删除,因此它永远不会到达链接函数。

AngularJS函数的执行顺序

一般来说,执行顺序是这样的(乔什·大卫·米勒解释道 https://groups.google.com/d/msg/angular/bBgJ6Tb-mHo/PDSU76pNPtAJ:

<div directive1>
  <div directive2>
    <!-- ... -->
  </div>
</div>

现在 AngularJS 将通过按一定顺序运行指令函数来创建指令:

directive1: compile
  directive2: compile
directive1: controller
directive1: pre-link
  directive2: controller
  directive2: pre-link
  directive2: post-link
directive1: post-link
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的指令的链接函数从未被调用? 的相关文章

  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • W3C 验证器:“握手警报:unrecognized_name”

    我正在尝试验证我的网站W3C Nu Html 检查器 https validator w3 org nu doc https 3A 2F 2Fwww healthdrop in 2F但我遇到了以下错误 不知道为什么 IO 错误 握手警报 u
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • 如何像在 jQuery 中一样在 AngularJS 中触发事件?

    是否可以做类似的事情 container trigger click 仅使用 AngularJS 如果不可能trigger 还有其他方法来管理这种行为吗 我有一个基本示例 可以在单击按钮时创建一个框 创建的框是可拖动的 现在 用户必须单击按
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • 我可以停止 :hover 应用于元素吗?

    假设我有一些 CSS button hover font weight bold 我怎样才能防止 hover随意应用样式 我的目标用例是当元素被禁用时 例如 使用这个 HTML
  • JSTL 在循环中每 5 个字段集创建一个新行

    您好 我目前正在迭代并在表中显示字段集列表 为了让布局变得更得体一些 我想在每次循环到达第五个字段集时创建一个新行 谢谢 JSP div class det table class det tr td td tr table div
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式

随机推荐

  • Titan 顶点中心索引与 Neo4j 标签

    在接近这个问题时 我试图对这两种技术进行比较 我想知道你们中是否有人已经有处理其中任何一种或两种技术的经验 我主要对处理类似用例时的性能数字感兴趣 这两个概念之间的区别是全局索引和本地索引之间的区别 据我了解 Neo4j顶点标签允许您通过顶
  • 进入交互式会话以检查失败的单元测试

    如果单元测试失败 我希望能够进入交互式会话 最好使用 IPython 是否有捷径可寻 edit 我所说的 交互式会话 是指完整的 Python REPL 而不是 pdb shell 编辑编辑 作为进一步的解释 我希望能够启动一个交互式会话
  • Q_DECL_EXPORT关键字含义

    Q DECL EXPORT int main int argc char argv 这是做什么的Q DECL EXPORT before int main means 摘自QT docs https doc qt io qt 5 share
  • 使用 Spring 进行多部分文件上传:NoSuchMethodException: ...CommonsMultipartFile.()

    我正在尝试使用 javascript 上传图像XMLHttpRequest对象 但 Spring 不断抛出NoSuchMethodException 例外情况如下 java lang NoSuchMethodException org sp
  • ThreeJS中InstancedMesh和InterleavedBuffer的区别和使用

    任何人都可以帮助我们解决 Threejs 中 InstancedMesh 和 InterleavedBuffer 之间的区别吗 我对这两个主题都感到困惑 任何人都可以让我知道哪种是渲染大量几何图形的优化方法 提前致谢 实例化渲染和交错缓冲区
  • Restlet用json接收和响应实现post

    首先 我想知道我正在做的事情是否正确 我有一个场景 我将收到一个 json 请求 并且我必须用它来更新数据库 一旦数据库更新 我必须用 json 确认进行响应 到目前为止我所做的是创建类扩展应用程序 如下所示 Override public
  • 在 Ubuntu 20.04 上自动启动 MailHog

    我按照以下步骤在临时环境中安装了 MailHog sudo apt get y install golang go go get github com mailhog MailHog 为了手动启动该服务 我这样做 cd go bin Mai
  • Visual Studio:MSB3073 错误退出,代码为 1

    每个人 我正在 Visual Studio 2013 中编译 DCMTK 3 6 1 我的操作系统是 Windows 8 我还使用了 CMake 3 2 3 我已经为 ALL BUILD 项目成功编译了 x64 版本的调试版本和发布版本 但
  • 如何在基于自定义策略的授权中访问 dbcontext 和会话

    我们是否可以访问 dbcontext 来获取自定义基于策略的授权中的表数据和会话 任何人都可以帮助如何实现它 services AddAuthorization options gt options AddPolicy CheckAutho
  • Objective-C 中省略返回类型和参数类型

    如果未显式声明返回或参数类型 则假定它是方法和消息的默认类型 id 因此 从技术上讲 它是如何工作的 这是毫无疑问的 但是忽略该类型是否是明智的 或者这只是一种不好的做法 苹果有这方面的官方指南吗 这是不好的做法 这是 C 早期的遗留问题
  • 在 vscode 上找不到“openssl/crypto.h”文件

    即使我将包含路径添加到 openssl 我也收到以下编译错误 我在 MAC 上使用 vscode 你能告诉我如何修复它吗 Error main cpp 3 10 fatal error openssl crypto h file not f
  • GlassFish Server 更新中心安装超时

    我已将 GlassFish Server 实例安装到 Netbeans 中 并且正在尝试安装其更新中心 我在 Windows 7 下以管理员身份运行 Netbeans 我的互联网连接速度很快 pkg oracle com 似乎从浏览器加载得
  • 在 Android 上使用 Firebase Analytics 时出现 SERVICE_VERSION_UPDATE_REQUIRED 错误

    我想将 Firebase Analytics 集成到我的项目中 我跟着Guide https firebase google com docs android setup但它给了我这个警告 06 30 18 38 30 514 W FA 2
  • 如何在调用下一个函数之前等待 firebase.database().ref('users/' + userId).set() 完成?

    我使用以下异步函数将数据写入我的 firebase 实例 function writeUserData uid fn ln userEmail firebase database ref users uid set firstName fn
  • 如何从 .wav 文件中提取特定频率范围?

    I m really声音处理方面的新知识 所以也许我的问题很简单 我想要做的是使用 R 从 wav 文件中提取特定的频率范围 假设为 150 400 Hz 换句话说 我想创建另一个波形文件 wave2 其中仅包含我想要的频率分量 指定 15
  • Github Actions 和 npm - npm:找不到命令

    我已经在 github actions 上创建了一个部署操作 这一切都适用于composer install 和 git pull master 分支 然而 在我的数字海洋水滴上 我遇到了问题bash line 4 npm command
  • 调用相机时,三星 Intent For OnActivityResult 为 Null

    我正在使用以下代码从相机获取图片 除三星外 其他手机均运行良好 请让我知道我做错了什么 final File root new File Environment getExternalStorageDirectory File separa
  • 鼠标按下事件计时

    我被要求编写代码 使其能够单击 Excel 中的图像并在其顶部添加形状 这是物理治疗师的身体图 该形状将指示患者疼痛的部位 我的代码通过使用 ActiveX 图像控件的鼠标按下事件来完成此操作 Private Sub bodypic Mou
  • 如何获取去电连接状态

    在我的应用程序开发中 我需要在拨出电话接通时进行振动 但无法获取呼叫已接听状态 我读过一些关于这个问题的主题 例如 去电状态 https stackoverflow com questions 2099782 outgoing call s
  • 为什么我的指令的链接函数从未被调用?

    我有这个指令 hpDsat directive ngElementReady function return restrict A link function scope element attributes put watches her