我有一个指令。
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
吗?或者我可以没有它吗?现在我的错误是:
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
抱歉,我明白了。我有点对了。
您只需使用formData
即可访问从其父控制器传递给指令的this
变量,或传递给TypeScript指令控制器的任何变量。
即:
this.formData
请务必一如既往地在班上引用您的变量。
class MyDirectiveCtrl {
myVar: type;
}
如果您决定使用$scope
,则可以通过执行
$scope.(controllerAlias).myVar
但这很愚蠢,所以只需使用this
。
我的错误来自我使用的console.log
我忘了。 this.formData.push
之后工作正常。