如何使一个指令等待angularjs中另一个指令的数据(即使是$ log)?

时间:2017-08-08 01:43:01

标签: angularjs

我看到很多答案将一个指令数据传递给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.

1 个答案:

答案 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