Javascript 如何在给定时间之前停止执行指令?

Javascript 如何在给定时间之前停止执行指令?,javascript,angularjs,Javascript,Angularjs,我有一个从服务器检索数据的异步函数,还有一个指令,它应该显示异步函数检索的任何数据 我试图做的是在我的指令中放置一个ng show为false,假设除非我将ng show设置为true,否则指令不会加载。 在我的异步函数检索数据之前,ng show将保持为false 问题是这不起作用,指令将加载,无论我是否在其上放置ng show-还有其他想法吗 这是我在代码中尝试过的: Js: Html: section class="list file-list group" ng-show="show"

我有一个从服务器检索数据的异步函数,还有一个指令,它应该显示异步函数检索的任何数据

我试图做的是在我的指令中放置一个ng show为false,假设除非我将ng show设置为true,否则指令不会加载。 在我的异步函数检索数据之前,ng show将保持为false

问题是这不起作用,指令将加载,无论我是否在其上放置ng show-还有其他想法吗

这是我在代码中尝试过的:

Js:

Html:

section class="list file-list group" ng-show="show" view-mode="assets">
    <file file="model.file"></file>
</section>

您是否尝试在函数末尾(或之后)调用$scope.$apply()?这在类似的情况下对我有效。我认为这与从外部更新$scope有关

免责声明:我不知道这是否是一个好的实践,但我被迫在使用异步函数时使用它几次,它做了我希望它做的事情

和ngHide只是显示和隐藏内容,他们不会有条件地将其添加或从页面中删除。如果你真的想要这种行为,那就调查一下

然而,我认为在指令中设置一个观察者,在内容准备就绪时采取行动,可以更好地解决您的问题。这是一种“更具角度”的解决问题的方法,因为它依赖于数据绑定

.directive('file', ['$rootScope', '$compile', function($rootScope, $compile) {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'file.html',
        scope: {
            file: '=', // YOU DIDN'T HAVE THIS YET
        },
        controller: function($scope) {
            $scope.$watch('file', function (newValue) {
                if (!newValue) { return; }
                // do async code here. $scope.file will be defined
            };
        }

正如另一张海报所提到的,您可能需要调用$scope.$apply(),以便在收到Ajax调用的结果后启动摘要循环。这取决于
getFile
方法的外观。如果它使用Angular的核心服务之一,比如,您可能不需要手动处理摘要周期。

这肯定是可行的,但如果不查看您的代码,就很难帮助您。请更新问题以显示您已经尝试了什么(如果可以的话,还可以准备一个plunker)。添加了一些源代码添加一块手表实际上可以做到这一点,但我想知道,放置file='='并没有在内部创建手表???不,它没有。
文件:'='
仅定义指令的独立范围内
文件
的含义。
.directive('file', ['$rootScope', '$compile', function($rootScope, $compile) {
        return {
            restrict: 'E',
            replace: true,
            templateUrl: 'file.html',
            scope: {
                show: '='
            },
            controller: function($scope) {
                //do stuff here once async function finished
            }
.directive('file', ['$rootScope', '$compile', function($rootScope, $compile) {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'file.html',
        scope: {
            file: '=', // YOU DIDN'T HAVE THIS YET
        },
        controller: function($scope) {
            $scope.$watch('file', function (newValue) {
                if (!newValue) { return; }
                // do async code here. $scope.file will be defined
            };
        }