2015-08-16 2 views
0

Я следующее определение контроллера:

angular.module('myapp', [ 'ngRoute' ]).config(function($routeProvider, 
$httpProvider) { 

[...] 
}) 
.controller('edit', function($scope, $http, $routeParams) { 
    $scope.projectid = $routeParams.id; 
    $scope.viewer = "undefined"; 
    $scope.mode = 'nothing'; 
    var projectid = $routeParams.id; 
}) 
.directive('initCesium', function(){ 
    return { 
     restrict: 'AEC', 
     link: function(scope, element, attrs) { 
      if (typeof Cesium !== "undefined") { 
       startup(Cesium, scope); 
      } else if (typeof require === "function") { 
       require(["Cesium", "scope"], startup); 
      } 
     } 
    } 
}); 

Мне нужно отправить запрос веб-службы в функции startup. Поэтому мне нужно пройти $http к startup в 2-х местах:

  1. startup(Cesium, scope);
  2. require(["Cesium", "scope"], startup);

Как я могу это сделать?

+0

И 'startup' is? ... – estus

+0

как насчет' .directive ('initCesium', function ($ http) {... ', а затем' startup (Цезий, область действия, $ http) 'или просто' angular.element (document.body) .injector(). получить ('$ HTTP') ' – webduvet

ответ

1

ОК прямолинейно.

Ниже рабочий код я создал, который иллюстрирует, как $ HTTP объект может быть доступен в ссылки функции вашей директивы.

В вашем случае вы можете применить приведенную ниже логику для передачи ссылок на функции , которые вы собираетесь использовать для доступа к объекту $ http.

Извлекает Js скрипку link

Javascript:

var app = angular.module('components', []) 

    app.controller("MyCtrl", ["$scope","$http", function($scope, $http){   
     $scope.ctrl = "Works!" 
     $scope.http = $http; 
    }]); 
    app.directive('helloWorld', function() { 
     return { 
      restrict: 'EC',    
      link:function(scope, elemnt, attrs){ 
       console.log("Directive");               
       scope.http.post("/echo/json/", "json=%7B%22name%22%3A%22nirus%22%7D") 
       .success(function(data, status) { 
        scope.name = data.name; 
        console.log(data.name) 
       }).error(function (status) { 
        console.log("Error occured") 
       }); 
      },    
      template: '<span>Hello {{name}} : it {{ctrl}}</span>' 
     } 
    }) 

angular.module('HelloApp', ['components']) 

Html:

<!doctype html> 
    <html ng-app="HelloApp"> 
    <body ng-controller="MyCtrl"> 
    <hello-world></hello-world> 
    </body> 
    </html> 

В моей функции связи я могу получить доступ к объекту HTTP.

Надеюсь, это вам поможет!

Смежные вопросы