.directive('mdValid', function($rootScope, $compile) {
return {
restrict: 'EA',
scope: { mdName: '@'},
link: function (scope, elem, attr) {
console.log("-----");
console.log(scope.mdName);
console.log("-----");
elem.attr("ng-if","false");
}
};
});
为什么设置了无法隐藏
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可以去了解一下Angular的总体原理,ng-if是属于compile阶段,Angular拿到模板后解析到ng-if就会去获取表达式的结果,然后决定是否渲染当前dom节点,而elem.attr("ng-if","false")执行的时候dom节点已被渲染结束,此时elem.attr()只能设置dom元素的一些attributes。
ng-if 不是dom的属性, 想要隐藏可以这样写 elem.addClass("ng-hide");
link阶段ng已经完成编译了,处理的是数据。关于手动编译你可以看看$compile服务
false去掉引号试试
我觉得,能不写指令还是不要写的好,代码维护性不好,一段时间过后,自己都不知道当时自己怎么想的。
解决方案:转向react