Angular Directive刷新参数更改

 用释怀来成全悲伤_490_905_560 发布于 2023-02-07 12:56

我有一个角度指令,初始化如下:


我希望它足够聪明,可以在$scope.some_prop更改时刷新指令,因为这意味着它应该显示完全不同的内容.

我已经测试了它,没有任何反应,连接函数甚至在$scope.some_prop更改时都没有被调用.有没有办法让这种情况发生?

2 个回答
  • 链接函数只被调用一次,因此它不会直接执行您期望的操作.您需要使用角度$watch来观察模型变量.

    需要在链接功能中设置此手表.

    如果对指令使用隔离范围,那么范围就是

    scope :{typeId:'@' }

    在您的链接功能中,您可以添加一个类似的手表

    link: function(scope, element, attrs) {
        scope.$watch("typeId",function(newValue,oldValue) {
            //This gets called when data changes.
        });
     }
    

    如果您没有使用隔离范围,请使用手表 some_prop

    2023-02-07 12:57 回答
  • 您要做的是监视指令中属性的属性.您可以使用$ observe()查看属性更改的属性,如下所示:

    angular.module('myApp').directive('conversation', function() {
      return {
        restrict: 'E',
        replace: true,
        compile: function(tElement, attr) {
          attr.$observe('typeId', function(data) {
                console.log("Updated data ", data);
          }, true);
    
        }
      };
    });
    

    请记住,我在这里使用了指令中的'compile'函数,因为你没有提到你是否有任何模型以及这是否对性能敏感.

    如果您有模型,则需要将" 编译 "功能更改为" 链接 "或使用" 控制器 "并监视模型更改的属性,您应该使用$ watch(),并采用角度{{}}来自财产的括号,例如:

    <conversation  type="convo" type-id="some_prop"></conversation>
    

    在指令中:

    angular.module('myApp').directive('conversation', function() {
      return {
        scope: {
          typeId: '=',
        },
        link: function(scope, elm, attr) {
    
          scope.$watch('typeId', function(newValue, oldValue) {
              if (newValue !== oldValue) {
                // You actions here
                console.log("I got the new value! ", newValue);
              }
          }, true);
    
        }
      };
    });
    

    2023-02-07 12:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有