虽然之前已经提出过这个问题,但它对我不起作用。控制器变量" myVar"在调用链接函数之前设置。根据文档和其他帖子,myVar应该在link函数中可用,但事实并非如此。实际上链接范围包含父控制器引用,但没有引用它自己的控制器???有什么想法吗?
angular.module('app.main')
.directive('myWidget', MyWidget)
.controller('MyWidgetCtrl', MyWidgetCtrl)
function MyWidget() {
return {
restrict: 'E',
templateUrl: 'my-widget-tmpl.html',
controller: MyWidgetCtrl,
link: function (scope, element, attrs) {
var test = false;
test = myVar; // doesn't work
test = scope.myVar; // doesn't work
test = scope.vm.myVar; // doesn't work
}
};
}
MyWidgetCtrl.$inject = ['$scope'];
function MyWidgetCtrl($scope) {
var vm = this;
vm.myVar= true;
}
答案 0 :(得分:1)
你在这里混合两种方法。在您的控制器中,您将放在控制器实例上。只要在指令定义中指定bindToController: true
,这将正常工作。无论如何,这被认为是最好的做法,原因有几个。
你的链接函数中的问题是你期望变量在范围内,但事实并非如此。它位于控制器上,位于示波器上。您。但是,链接函数的第四个注入是指令控制器,所以你可以像这样访问它:
link: function(scope, element, attrs, ctrl) {
var test = false;
test = ctrl.myVar;
}
唯一的打嗝是如果你require
其他指令,那么你还需要你自己的指令控制器(我认为),而不是一个控制器,你将获得{{1链接函数中的控制器而不是一个。如果您从未使用过array
,请不要担心我刚刚说过的内容,但如果您希望使用require
,请将其保留在您的脑海中
require
。这是你唯一缺少的两件事。
答案 1 :(得分:1)
您应该在MyWidgetCtrl的function SecurityController(){
'ngInject';
const vm = this;
vm.security = "secure";
}
export default SecurityController;
上绑定您的变量:
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import SecurityController from './securityController'
import SignUp from './services/signUpService';
import AuthenticationService from './services/authService'
const security = angular.module('security', [
uiRouter,
]).controller(SecurityController)
.service(SignUp)
.service(AuthenticationService);
export default security.name;
否则,您应该使用bindToController方法,跳过$scope
的使用。