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

获取初始数据的正确策略AngularJS/Directive,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个加载默认页面的应用程序,该默认页面需要一些数据来呈现自己 在页面中,我有一个指令,它用一些视图元素包装数据。我希望应用程序在指令“加载”时提取数据,这样一旦返回数据,指令就可以开始显示数据的过程(例如,对于某些列表,ng repeat等) 调用REST服务以获取数据(编译、链接、后链接)的最佳生命周期阶段是什么 注意,REST服务在angular服务对象中声明,并注入控制器 例如: <div ng-controller="MainCtrl"> <div my-dir

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

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

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

注意,REST服务在angular服务对象中声明,并注入控制器

例如:

<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
            }
        };
    });

我更喜欢在指令本身上使用隔离作用域,并在
MainCtrl
控制器中使用解析

如果您最终得到的
$scope.data
是任何。。。只需执行
$scope.data=InjectedService.get()
在您的
MainCtrl
中,它应该可以正常工作

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


换句话说,让您的控制器获取数据。您的指令无需担心。

您建议如何“启动”服务呼叫?使用ng route的
解决
或直接绑定到承诺。这将“启动”请求。在控制器中,
$scope.data=service.get()就是这样。。。别想得太多!
angular.module('angularTestApp')
    .controller('MainCtrl', ['$scope', 'InjectedService', function ($scope, InjectedService) {
    $scope.data = {};  
    $scope.getData = function() {
       InectedService.get(function(data) {
       $scope.data = data;