动态添加 Angular 指令

2024-02-17

我对 Angular JS 相当陌生,并且发现它的学习曲线很陡峭,我感觉我真的错过了这里的要点,但这里是:

我想从控制器向我的页面添加指令。所以我想如果我将指令标签添加到页面,指令和关联的控制器/模板等就会随之添加。在阅读了 $compile 方法之后,我认为这将用于将该指令绑定到其新创建的标记。这部分在下面被注释掉了,但是无论有没有这个,我都需要登录这个词出现并且它的控制器来控制它?

当指令标签在加载时位于页面上时,我可以在网络上找到很多类似的示例,并且可以让它们正常工作,所以这就是让人认为它与 $compile 方法相关的原因 - 我错过了什么?

HTML:

<div ng-app="application" ng-controller="myController"></div>

JS:

var myApp = angular.module('application', []);

myApp.controller('myController', ['$scope', function($scope) {

        function showLoginDirective () {
            $scope.login = angular.element(document.createElement('login'));

            angular.element(document.body).append($scope.login);
        };

        showLoginDirective();
    }
]);

angular.module('directives', [])
    .directive('login', function($compile) {
        return {
            restrict: 'E',
            controller: 'LoginController',
            template: '<div>login</div>',
            link: function(scope, element, attrs) {
                //$compile(element.contents())(scope.$new);
                console.log('should I not have a div containing login controlled by loginController at this point?');
            }
        };
});

上面的代码也在这里:http://jsfiddle.net/d5n6L/7/ http://jsfiddle.net/d5n6L/7/


您实际上不应该使用 Angular 向页面动态添加元素。许多具有 jQuery 背景的人(包括我自己)都认为我们可以继续这种做法,只需根据需要将内容添加到页面即可。

然而,对于 Angular,逻辑实际上应该在标记中可见。这意味着什么?在您的情况下,无论如何您都应该有该指令,然后使用以下命令控制其可见性ng-show or ng-hide or ng-class.

所以,像这样的事情是最好的:

<login ng-show="showLogin"></login>

然后您可以按照您的编程使用您的指令。

请注意,您还可以定义内联控制器(分配依赖项数组和这些依赖项的函数作为controller您的指令的属性)。这将所有相关代码保留在同一位置。

E.g.,

angular.module('directives', [])
    .directive('login', function($compile) {
        return {
            restrict: 'E',
            controller: ['$scope', function($scope) {

                function showLoginDirective () {
                    $scope.showLogin = true;

                };

                 showLoginDirective();
              }
            ],
            template: '<div>login</div>',
            link: function(scope, element, attrs) {
                //$compile(element.contents())(scope.$new);
                console.log('should i not have a div containing login controlled by loginController at this point?');
            }
        };
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态添加 Angular 指令 的相关文章

随机推荐

  • 如何使用 JavaScript 以最佳方式渲染大量 DOM 元素?

    在网页上 我有一个相当大的项目列表 例如 产品卡 每个项目都包含图像和文本 大约有 1000 个 我想在客户端上过滤此列表 仅应显示那些未过滤掉的项目 但存在渲染性能问题 我应用了一个非常窄的过滤器 只剩下 10 20 个项目 然后取消它
  • 摆脱天文学中的单位

    我有一个大 262615 3 值的数组 所有值都附加有单位 具体源于这个函数 def coordconvert data from astropy coordinates import SkyCoord from astropy impor
  • 如何在 iOS 上以编程方式将视图旋转 180 度?

    如何在我的 iPhone 应用程序中以编程方式将视图旋转 180 度 由于 CGAffineTransform Rotate 使用弧度作为测量单位 并且 180 度与 PI 相同 因此您可以简单地执行以下操作 而不是其他答案中提供的数学 v
  • 在 R 中导入 csv 文件/从整数转换为双精度时出现问题

    今天我终于决定开始攀登 R 陡峭的学习曲线 我花了几个小时 成功导入了数据集并做了一些其他基本的事情 但我在数据类型方面遇到了问题 包含小数的列作为整数导入 转换为双精度会更改值 在尝试获取一个小的 csv 文件放在这里作为示例时 我发现仅
  • 经典 ASP 在 IIS7 中始终返回代码 200

    我在 IIS7 中启用了跟踪 我在 IIS 管理工具的 ASP 选项卡中将这些属性设置为 true 应用程序允许客户端调试 应用程序允许调试 错误到NTLog 脚本错误发送到浏览器 为了测试它 我编写了一个小型的经典 ASP 测试页 其中我
  • EF:选择子类的所有实体(继承)

    我正在使用数据库优先方法和 DbContext 我的数据模型中有几个继承结构 TPH 但是DbContext只为基类创建一个DbSet 而没有为子类创建一个DbSet 我应该如何检索指定子类的所有实体 我无法根据映射条件编写查询 因为我必须
  • Codeigniter 和 RestServer。如何上传图片?

    我正在 Codeigniter 中使用 Phils RestServer 请参阅链接 编写 API 我需要一种通过 API 上传图像的方法 我怎样才能做到这一点 是否就像使用正确的标头 使用什么标头 发出 POST 请求一样简单 https
  • 如何获得 DIV 的“自动”高度

    所以当我用 jquery 在 div 上设置固定高度时 就像 div height 200 的价值 div height 始终为 200 即使该 div 的内容超过该高度 我使用overflow hidden 我怎样才能获得 DIV 的真实
  • ASP.NET MVC 视图引擎性能

    我正在使用 asp net mvc 最终版本开发高负载解决方案 最近我们的团队注意到 服务器响应客户端的大部分时间都用于页面渲染 简单的时间安排如下所示 Page start 1 8608363s Render module 1140 Mo
  • 突破溢出:隐藏

    我们目前正在努力尝试突破隐藏溢出的 div 我们有一个下拉菜单 当用户键入时 在搜索字段中键入 c 即可查看 该菜单中会填充建议 该下拉菜单当前隐藏在菜单栏后面 因为它具有 溢出隐藏 如果我们移除top 100 并将位置设置为fixed 但
  • 我正在使用什么 SDL 和 OpenGL 版本和实现

    我下载了 SDL 1 2 14 在 Windows 7 上 我安装了 Mobility Radeon X1800 驱动程序 我正在使用 Microsoft Visual C 2010 Express 我在 VC 目录 中添加了SDL包含和库
  • StoreKit 返回所有产品 ID

    这个问题与我在这里找到的其他问题有点不同 我的 In App StoreKit 正在运行 我可以成功列出我的商店中的产品 我已经浏览了苹果文档 但从未看到我的问题得到解决 我可能错过了 我的客户 非营利组织 希望能够通过他们的应用程序接受捐
  • 在 Google Cloud 端点中实施缓存控制

    无论参数列表如何 我的端点方法都会为每次调用生成不同的响应 我经常看到我的客户端使用相同的参数列表调用端点 并且前端实例返回缓存的响应 In the 官方文档 https cloud google com appengine docs ja
  • 通过allow_url_include=0 在服务器配置中禁用包装器

    我正在尝试使用检索页面内容AJAX称呼 我在页面包装器中有一系列链接 当我点击一个链接时 它会加载一个 JavaScript 函数 该函数从php脚本 在这种情况下 我正在开发我的localhost 但在生产中 脚本将位于与执行以下操作的文
  • Keras 教程错误:NameError:名称“层”未定义

    我正在尝试跟随this https www tensorflow org guide kerasKeras教程 但是使用命令编译时遇到以下错误python3 test py Traceback most recent call last F
  • 如何获取任意位置的当前时间

    我必须上传图像 并且必须发送上传图像时的日期和时间 我正在获取上传图像的设备的纬度和经度 现在我想获取该图像的时间和日期上传图像时的位置 我不想从设备中获取日期和时间 是否可以借助该地点的纬度和经度来获取日期和时间 您可以通过 GeoNam
  • MEX 文件可以使用 -fsanitize=address 运行吗?

    我有一个用 g 正常编译的 MEX 文件 我最近将其编译更改为使用 clang 并包含 fsanitize address进入两个LDFLAGS and CFLAGS 注意 此项目不存在 CXX 标志 然而 尽管如此 一旦我进入 MATLA
  • 在 docker 中使用 vaadin 运行 Spring boot 应用程序时初始化 Tomcat 失败

    我是一名业余爱好者 最近从 heroku 切换到 render com 我想把我的 SringBoot 应用程序放在那里 但它要求我在我没有经验的 docker 环境中运行它 我设法为其编写 Dockerfile 并从 jar 文件运行它
  • 控制行长 d3.js

    我使用以下代码生成一个被其他圆圈包围的圆圈 这些圆圈都通过以下方式连接到主圆圈
  • 动态添加 Angular 指令

    我对 Angular JS 相当陌生 并且发现它的学习曲线很陡峭 我感觉我真的错过了这里的要点 但这里是 我想从控制器向我的页面添加指令 所以我想如果我将指令标签添加到页面 指令和关联的控制器 模板等就会随之添加 在阅读了 compile