我有这个指令,它将Service<Void> myService = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
try {
DatabaseFunctionality dbFunc = new DatabaseFunctionality();
dbFunc.setProgressUpdate((workDone, totalWork) ->
updateProgress(workDone, totalWork));
dbaseFunc.performWorkOnDb();
} catch (InterruptedException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
};
}
};
变量设置为控制器的test
函数中的abc
。但是在我的链接函数中,init
变量未定义。
test
在另一个创建指令的JavaScript文件代码中。它正在调用angular.module('module')
.directive('directive', myDirective);
function myDirective() {
var directive = {
link: link,
bindToController: true,
controllerAs: 'dt',
controller: Controller,
...
};
return directive;
function link(scope, element, attrs) {
...
scope.dt.initialize = function() {
initializeDirective(scope, element, attrs);
}
}
function initializeDirective(scope, element, attrs) {
// not able to get scope.dt.test, it's undefined
console.log(scope.dt.test); // undefined
}
}
function Controller() {
var vm = this;
vm.test = '123';
vm.create = function(data, config) {
vm.test = 'abc';
vm.initialize();
}
...
}
函数
create
根据我的理解,// JavaScript in another file that inits the directive
var directive = vm.get(...);
vm.create(vm.data, config);
应自动注入链接功能,原因是scope.dt
,但controllerAs
不存在。
修改
我将scope.dt.test
变量放在test
函数之外,并将其设置为create
。 123
现在记录console.log
,这不是我想要的(我想要123
)。
答案 0 :(得分:1)
这是因为你的链接函数在编译指令时执行。如果你之后再打电话给你,那你就迟到了变量&#39; test&#39;在编译时是不确定的。
您可能需要的是将值指定为指令的属性:
angular
.module('module')
.directive('directive', myDirective);
function myDirective(){
return {
link: link,
bindToController: true,
controllerAs: 'dt',
controller: controller,
scope: {
test: '@'
}
};
function controller(){
var vm = this;
// at this point vm.test is set to the value specified.
}
function link(scope, elem, attrs){
// U can use scope.dt.test, scope.test or attrs.test here
}
}
将此指令用作:
<my-directive test="{{someValue}}"></my-directive>