У меня есть следующее определение контроллера:
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-х местах:
startup(Cesium, scope);
require(["Cesium", "scope"], startup);
Как я могу это сделать?
Хорошо, прямо и просто.
Ниже приведен рабочий код, который я создал, который показывает, как можно получить доступ к объекту $ http в функции ссылок вашей директивы.
В вашем случае вы можете применить приведенную ниже логику для передачи ссылок на функции, которые вы собираетесь использовать для доступа к объекту $ http.
Оформить ссылку Js fiddle
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.
Надеюсь, это поможет вам!
startup
есть? ....directive('initCesium', function($http){ ...
и затемstartup(Cesium, scope, $http)
или простоangular.element(document.body).injector().get('$http')