获取初始数据AngularJS / Directive的正确策略

时间:2014-01-27 19:31:16

标签: angularjs angularjs-directive

我有一个应用程序加载一个默认页面,该默认页面需要一些数据来呈现自己。

在页面中,我有一个指令用一些视图元素包装数据。我希望应用程序在指令“加载”时获取数据,这样一旦数据被返回,指令就可以开始呈现数据的过程(例如某些列表的ng-repeat等)。

调用REST服务来获取数据(编译,链接,后链接)的最佳生命周期阶段是什么?

请注意,REST服务在角度服务对象中声明并注入控制器。

示例:

<div ng-controller="MainCtrl">
  <div my-directive data="{{data}}>
</div>

angular.module('angularTestApp')
    .directive('myDirective', function () {
        return {
            templateUrl: 'route/to/my/view/template.html',
            restrict: 'AE',
            compile: function(tElement, tAttrs, transclude) {
                //fetch data here?
                scope.getMyData();  //calls REST service and sets value in the controller and set value for binding
            }
            link: function postLink(scope, element, attrs) {
                scope.doSomething = function () {
                    console.log('I\'m doing something useful');
                }

                //does call to controller to fetch data go here?
                scope.getMyData();  //calls REST service and set value in the controller for binding
            }
        };
    });

控制器:

angular.module('angularTestApp')
    .controller('MainCtrl', ['$scope', 'InjectedService', function ($scope, InjectedService) {
    $scope.data = {};  
    $scope.getData = function() {
       InectedService.get(function(data) {
       $scope.data = data;

1 个答案:

答案 0 :(得分:1)

我更喜欢在指令本身上使用隔离范围并在MainCtrl控制器中使用解析。

如果您最终只有$scope.data为什么......只需在$scope.data = InjectedService.get();MainCtrl进行操作即可。

只要注入的服务返回$ q承诺,那么它将全部是自动的。您不需要编写的大部分代码。

换句话说,让控制器获取数据。你的指令不需要担心它。