我看到很多答案将一个指令数据传递给angularjs中的另一个指令,但没有任何对我有用。
我有一个指令(readDirectoryContents)来通过拖放文件夹来读取目录内容。现在我想使用另一个指令(buildTree)在树结构中显示这个目录内容。
首先我创建了一个指令
<readDirectoryContents>
然后从这个指令获得$ scope.files,现在我创建了另一个指令
<buildTree>
我想使用$ scope.files,所以这里的问题是
<readDirectoryContents> and <buildTree>
正在加载,同时使$ scope.files成为
中的[]<buildTree> directive.
如何制作
<buildTree> to wait executing until we get $scope.files from <readDirectoryContents>. I am using console.log($scope.files); in my
<buildTree> directive to display the "files" but it is always showing [] as <readDirectoryContents> and <buildTree> are getting executed at the same time.
请记住,我不是在询问如何将$ scope.files显示到UI中,但我问的是如何执行
<buildTree> wait until the <readDirectoryContents> directive execution is done.(just to get $scope.files from first directive to next).
这类似于让一个承诺等到我们从另一个承诺得到结果,但在这里我要求在指令的上下文中。如何使一个指令执行等到我们从另一个指令获取数据。
提前致谢。我在我的代码中使用angularjs 1。我的问题是如何使console.log($ scope.files)不在
中显示[]<buildTree> directive.
答案 0 :(得分:1)
也许你可以实施一个&#39;手表&#39;在你的buildTree指令中。
在buildTree指令中尝试执行此操作:
//You need to receive files in your scope, I am considering that your
//files is shared between your directives.
$scope.$watch('files', function (newValue, oldValue) {
//The watch will execute everytime your files variable changes
if(newValue === oldValue) {
return;
}
//here you can set files to an internal variable of you directive
// or call a function to build your tree again
$scope.intFiles = newValue;
});
然后,您可以使用$ scope.intFiles构建树。每当您的文件变量在readDirectoryContents中更新时,它应该反映到您的buildTree指令(从逻辑上反映到您的手表)。
请注意,这是可能的解决方案之一,应该可以解决您的问题。
请在代码中注意很多手表,以避免出现性能问题。
有关详细信息,您可以查看有关监视的完整文档:$rootScope.Scope