将主机配置传递给控制器​​/服务

时间:2013-06-20 21:56:29

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个控制器在指令设置范围之前发出$ http.get请求。如何在控制器执行此操作之前确保首先设置所需的范围值?

我有一个指示......

<mydir host="'localhost:8080'" api="/myapi/bla=?asdf=123"/>

定义为......

myapp.directive('mydir', function() {

    return{

        restrict: 'E',
        templateUrl: 'scripts/partials/dillist.html', 
        link: function(scope, element, attrs){
            scope.host = attrs['host'];
            scope.api = attrs['api'];
        }

    }
});

我的服务..

.service('MyService',function($http, $q){

        return{

            getPageData: function(host, api){
                $http.get(host+ api)
                ///some more stuff
            }

        }
    }

然而,我的控制器在指令有机会将指令中的属性分配给范围之前执行服务方法。

// inside the controller //
MyService.getPageData($scope.host, $scope.api).then(function(res){
       ... some more code ..
    });

1 个答案:

答案 0 :(得分:0)

使用当前架构解决此问题的最简单方法可能是将getPageData调用移动到作用域上的$ watch函数。

这样的事情:

$scope.$watch('[host,api]'), function() {
   if ($scope.host && $scope.api)
       MyService.getPageData($scope.host, $scope.api).then(function(res){
          ... some more code ..
       });
}, true);