Передать переменную из директивы в контроллер
У меня есть это определение директивы и хочу передать currentScriptPath
к TestController
,
Как я могу это сделать?
(function(currentScriptPath){
angular.module('app', [])
.directive('test', function () {
return {
restrict: 'E',
scope: {},
templateUrl: currentScriptPath.replace('.js', '.html'),
replace: true,
controller: TestController,
controllerAs: 'vm',
bindToController: true
};
});
})(
(function () {
var scripts = document.getElementsByTagName("script");
var currentScriptPath = scripts[scripts.length - 1].src;
return currentScriptPath;
})()
);
TestController.$inject = ['$scope'];
function TestController($scope) {
// try to access $scope.currentScriptPath here
}
1 ответ
Решение
Как вы хотите получить доступ currentScriptPath
в вашем директиве контроллера. Вам нужно только прикрепить эту переменную в вашей текущей области видимости внутри link
функция директивы и эта область будет currentScriptPath
доступный вам контроллер TestController
сфера, потому что вы использовали bindToController: true,
в вашей директиве.
наценка
<div ng-controller="Ctrl">
<test></test>
</div>
директива
(function(currentScriptPath) {
angular.module('app', [])
.directive('test', function() {
return {
restrict: 'E',
scope: {},
templateUrl: currentScriptPath.replace('.js', '.html'),
replace: true,
controller: TestController,
controllerAs: 'vm',
bindToController: true,
link: function(scope, element, attrs) {
scope.currentScriptPath = currentScriptPath; //will update the value of parent controller.
}
};
});
})(
(function() {
var scripts = document.getElementsByTagName("script");
var currentScriptPath = scripts[scripts.length - 1].src;
return currentScriptPath;
})()
);
контроллер
function TestController($scope, $timeout) {
var vm = this;
$timeout(function() {
alert($scope.currentScriptPath) //gets called after link function is initialized
})
}