将依赖项注入指令调用的控制器
Inject dependency to controller called by directive
我想知道是否可以(如果可以,那么如何?:))向指令调用的控制器注入依赖项。
我有一个名为 MyCtrl 的控制器控制器。这是他的签名:
app.controller('MyCtrl', function ($scope, dataService, aDependency){...}
这个Controller通常定义在我的路由中:
.segment('myPage', {
templateUrl: templatesUrl + 'mypage.html',
resolve: {
aDependency: ['$q', 'dataService', '$location', function ($q, dataService, $location) {
var defer = $q.defer();
dataService.retrieveCCData(defer, $location);
return defer.promise;
}],
},
controller: 'MyCtrl'
})
但是现在,我还想从指令中调用这个控制器。
问题是我不知道如何注入 aDependency。
它说提供者未知。
这是我的指令:
app.directive('gettingStarted1', ['dataService', function (dataService) {
return {
restrict: 'E',
templateUrl: templatesUrl + 'mypage.html',
controller: 'MyCtrl',
//resolve: {
//datasources: ['dataService', function (dataService) {
//return null;
//}]
//}
};
}]);
无法在指令中解决。
一些帮助将不胜感激
谢谢
您可以使用指令中的控制器功能
.directive("sampledirective", function (dependancy1, dependancy2, ....) {
return {
scope: '=',
controller: function ($rootScope, $scope) {
//DO your controller magic here where you got your scope stuff
}
}
})
我了解到的一件事是 $scope 值似乎不会立即从指令更新到控制器。如果你使用
这样的对象
$scope.smth.smth = 'test'
它会立即更新,否则您需要 $apply
将 aDependency
设为单独的服务。
app.provider('aDependency', function () {
this.$get = ['$q', 'dataService', '$location', function ($q, dataService, $location) {
var defer = $q.defer();
dataService.retrieveCCData(defer, $location);
return defer.promise;
}];
});
您可以通过
解决
resolve: {
'aDependency': 'aDependency',
}
或
resolve: ['aDependency'];
我想知道是否可以(如果可以,那么如何?:))向指令调用的控制器注入依赖项。
我有一个名为 MyCtrl 的控制器控制器。这是他的签名:
app.controller('MyCtrl', function ($scope, dataService, aDependency){...}
这个Controller通常定义在我的路由中:
.segment('myPage', {
templateUrl: templatesUrl + 'mypage.html',
resolve: {
aDependency: ['$q', 'dataService', '$location', function ($q, dataService, $location) {
var defer = $q.defer();
dataService.retrieveCCData(defer, $location);
return defer.promise;
}],
},
controller: 'MyCtrl'
})
但是现在,我还想从指令中调用这个控制器。 问题是我不知道如何注入 aDependency。 它说提供者未知。 这是我的指令:
app.directive('gettingStarted1', ['dataService', function (dataService) {
return {
restrict: 'E',
templateUrl: templatesUrl + 'mypage.html',
controller: 'MyCtrl',
//resolve: {
//datasources: ['dataService', function (dataService) {
//return null;
//}]
//}
};
}]);
无法在指令中解决。 一些帮助将不胜感激 谢谢
您可以使用指令中的控制器功能
.directive("sampledirective", function (dependancy1, dependancy2, ....) {
return {
scope: '=',
controller: function ($rootScope, $scope) {
//DO your controller magic here where you got your scope stuff
}
}
})
我了解到的一件事是 $scope 值似乎不会立即从指令更新到控制器。如果你使用
这样的对象 $scope.smth.smth = 'test'
它会立即更新,否则您需要 $apply
将 aDependency
设为单独的服务。
app.provider('aDependency', function () {
this.$get = ['$q', 'dataService', '$location', function ($q, dataService, $location) {
var defer = $q.defer();
dataService.retrieveCCData(defer, $location);
return defer.promise;
}];
});
您可以通过
解决 resolve: {
'aDependency': 'aDependency',
}
或
resolve: ['aDependency'];