Angular指令在链接函数的$ scope中没有数据

时间:2015-12-18 14:42:43

标签: javascript angularjs

我有这个指令,它将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函数之外,并将其设置为create123现在记录console.log,这不是我想要的(我想要123)。

1 个答案:

答案 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>