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