使用TypeScript访问指令控制器中父作用域的值

时间:2016-01-15 00:33:03

标签: angularjs typescript

我有一个指令。

export class SigninFormDirective implements angular.IDirective {

        // configure directive
        restrict: string =  'AE';
        templateUrl: string = "/public/app/signin/views/directiveTemplates/signinForm.html";
        scope: Object = { formData: "=" };
        controller: Function = SigninDirectiveCtrl;
        controllerAs: string = "form";
        bindToController: boolean = true;

        constructor($http: angular.IHttpService, $q: angular.IQService) {                        

        }        

        static SignupFormFactory(): angular.IDirectiveFactory {

            const directive = ($http: angular.IHttpService, $q: angular.IQService) => {
                return new SigninFormDirective($http, $q);
            };
            directive.$inject = ['$http', '$q'];
            return directive;            
        }


    }  

我想在指令控制器中访问我的formData变量。 formData变量来自其父控制器。

 // define main controller`
    export class SigninCtrl implements interfaces.ISigninCtrl {

        formData: Object[];
        // define IID on MainController
        static IID = "SigninCtrl";

        // define controller
        constructor(public $state : angular.ui.IState) {
            this.init();            
        }

        private init = () => {
            this.formData = [];
        }



    }

在我的指令控制器中,我有一个方法,我试图访问formData:

 public submitForm($event: angular.IAngularEvent, email: string, password: string) {            
        var userService = this.userService;
        var utilityService = this.utilityService;            

        // form was submitted
        this.formWasSubmitted();

        if(typeof password === undefined) {
            return;
        } else {                               

            var deferred = this.$q.defer();
            userService.signin(email, password)
            .then(dataObject => {                    
                if(dataObject.data.status.short === "NOTACTIVATED") {                        
                    this.formData.push(dataObject);                        
                    deferred.resolve(dataObject);
                }                                               
            }, error => {
              deferred.reject(error);  
            })                
        }

    }

我正在使用controllerAs - 如何在指令控制器中访问formData?我设置了双向绑定,但我不确定如何使用controllerAs在控制器中获取它。我应该使用$scope吗?或者我可以没有它吗?现在我的错误是:

enter image description here

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

抱歉,我明白了。我有点对了。

您只需使用formData即可访问从其父控制器传递给指令的this变量,或传递给TypeScript指令控制器的任何变量。

即:

this.formData

请务必一如既往地在班上引用您的变量。

class MyDirectiveCtrl {
    myVar: type;
}

如果您决定使用$scope,则可以通过执行

来访问变量
$scope.(controllerAlias).myVar

但这很愚蠢,所以只需使用this

我的错误来自我使用的console.log我忘了。 this.formData.push之后工作正常。