【发布时间】:2017-03-08 06:37:35
【问题描述】:
我对 AngularJS(具体来说是异步编程范式)非常陌生,并且正在从事我的第一个 AngularJS 项目。我知道它的基本原理。
问题:我有一个指令,只有在我有数据时才需要创建,并且数据是异步获取的。此外,该指令存在于控制器的模板中。我应该怎么做?
我的方法:在指令上有一个 ng-if ="variable" ,一旦数据可用,就需要创建该指令,并监视该变量,一旦设置了变量,就会创建指令。
但是,我无法以编程方式执行此操作!我怎样才能做到这一点,或者有更好的方法。
控制器
$scope.dataFeteched= false;
$http.get(url)
.then(function success(result){
$scope.dataFeteched = true;
});
HTML
<span>Hello World</span>
<directive-abc ng-if="dataFeteched"></directive-abc>`
还有,一旦 $digest 已经完成了控制器模板的执行,它又将如何执行该特定指令?
【问题讨论】:
-
它感觉你在这里太努力了。一般来说,指令已经响应异步数据,不需要“延迟”。当没有数据时,在 DOM 中存在指令是否会导致问题?
-
异步数据获取代码在控制器中,如果指令存在于 DOM 中,是的,这是一个问题。这张图片可能会帮助您了解我在做什么code design diagram
-
该图应该显示什么?它绝对不会显示任何数据,也不会显示您有顾虑的原因。同样,如果指令设计得当,处理异步数据应该没有问题……这是 Angular 的关键租户之一,也是使其如此强大的原因之一。你在这里问的是如何阻止框架中内置的东西自然发生,而不是解释为什么你觉得你需要这样做。
-
不要在程序上考虑角度,而是从组合上考虑。角度摘要循环知道它正在观察的数据何时发生变化,并调整 DOM 以响应这些数据变化。除非你的指令做了一些非常不正常的事情,否则它应该是空的,没有数据,然后在数据出现时呈现,而不需要你强行绕过它。
标签: javascript angularjs angularjs-directive frontend angularjs-digest