如何使用angularjs中的服务数据正确构造/更新指令?

罗兰多

在第一次加载时,我希望应用程序在第一次加载时从X个http请求(X基于水果中元素的数量)异步检索数据,并更新一条指令,该指令显示已检索到多少个项目。检索所有项目后,将触发一个事件,导致该指令/ dom元素被隐藏。

用angular做到这一点的最佳方法是什么?以下是我对服务,控制器和指令的职责的看法。这是正确的吗?还是应该有其他/更好的方法来做到这一点?

    APP.service('myService', function($http) {
       this.fruits = ['Apple', 'Bannana', 'Pear', 'Orange'];
       this.processedFruit = [];
    });

    APP.controller('myController', ['$scope', '$http', 'myService', function($scope,$http) {
          $scope.$emit('LOAD');
          // Should the following be in the service instead of the controller?
          for(var i = 0; i < myService.fruits; i++) {
                $http.get('someurl/'+fruits[i]).success(function(response) {
                    myService.processedFruit.push(response);


          // Somehow tell the "statusofloading" directive to update its (Completed $http Requests)?
            });
      }
      // Once all requests are finished $scope.$emit('UNLOAD') somehow to the directive?;
}]);

APP.directive('statusofloading', function() {
    return {
        scope:true,
        restrict:'E',
        link: function($scope,e,a) {
                //Completed $http Requests
                $scope.completeRequests = 0;

                // Total $http Requests
                $scope.totalRequests = // Get the number from the service somehow from (length of this.fruits);
                        $scope.$on('LOAD', function(){$scope.loading=true});
                        $scope.$on('UNLOAD', function(){$scope.loading=false});      
        },
        replace: true,
        template:"<h1>({{completedRequests}}) / ({{totalRequests}}) </h1>"
    }
})
莫里斯

$ emit使用第二个参数,您可以在其中传递任何所需的参数。

$scope.$emit('LOAD',{totalRequests: myService.fruits});

然后在您的指令中:

$scope.$on('LOAD', function(args){
    $scope.loading=true;
    $scope.totalRequests = args.totalRequests;
});

然后,您可以告诉指令何时完成请求,并且知道何时完成所有操作,并且需要隐藏自身。确保将失败的请求和成功的请求通知给指令。

另请参阅角度忙碌,这是解决该问题的另一种通用方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用服务中的数据更新指令?

如何使用 angularjs 指令中的内置服务?

除非使用angularjs刷新页面,否则如何修复指令中来自服务的显示数据?

如何使用$ compile服务通过AngularJS指令包含HTML数据

在Angularjs中绑定指令时,如何正确使用'&'?

AngularJS更新指令中显示的数据

AngularJS-当指令更改服务中的数据时,视图未更新

如何在 AngularJS 指令中更新类

使用服务时AngularJS无法正确加载指令

angularjs从服务中获取正确的格式数据

如何使用AngularJS更新/编辑数据库中的数据

如何刷新使用AngularJS中的$ resource服务获取的本地数据

如何使用模拟数据测试AngularJS服务中的功能

如何使用单向绑定正确格式化指令中的数据?

使用多个服务的AngularJS指令

如何在使用数据初始化指令之前确保服务中的$ http.get完成?

AngularJS更新指令中的值

调用服务方法后AngularJs更新指令

AngularJS使用子指令作为指令数据

如何在AngularJS中的Controller之间正确共享和更新数据?

如何正确更新reactjs中的数据?

AngularJS-通过服务从指令更新控制器数据(this.model语法)

当注入的服务上的值更新时,如何更新AngularJS(使用TypeScript)控制器中的值

AngularJS-将对服务的不正确使用转换为指令

更新角度指令中的数据

如何在angularjs中使用服务在控制器之间共享和更新数据

如何在AngularJS指令中使用编译功能对服务中的ng-repeat元素进行处理

angularjs-nvd3-指令更新数据

使用angular指令在API调用中更新组件数据