我有一个带有form和form元素的angularjs指令。我无法对该指令的原始标记或代码进行任何更改。一个表单元素有一个ng disabled=“some expression”。我想在页面加载后更改此表达式。因此,我使用jquery的ready函数将表达式更改为另一个表达式(我可以获取对作用域和控制器的引用,并使用$apply()。这里可能不适用。)
加载页面时,我看到元素已禁用ng=“my new expression”。在页面加载时,新表达式的计算结果为true,但由于原始表达式的计算结果为false,因此元素未被禁用。
<button.... ng-disabled="some expression" ...></button> <--- original one. I can't change its code
<button.... ng-disabled="a new expression" ...></button> <--- after page loads
我知道改变表达是不够的。如何让angularjs计算更新的表达式,并根据更新表达式的结果禁用或启用按钮?
1条答案
按热度按时间sh7euo9m1#
在更改表达式之后,您需要以某种方式重新编译元素,然而,在angular之外执行此操作可能太棘手。
如果你看看源代码https://github.com/angular/angular.js/blob/9bff2ce8fb170d7a33d3ad551922d7e23e9f82fc/src/ng/directive/attrs.js 您可能会看到ngdisabled指令只是添加了一个观察程序来设置属性值,所以您可以删除该观察程序并添加自己的观察程序:
注意,虽然这是非常棘手和不稳定的-很难找到正确的观察者和正确的元素,如果该元素是用ng重新创建的,如果这个黑客已经消失,等等。但它是有效的。