Javascript 隐藏来宾用户元素的指令
我想创建一个可以为来宾用户隐藏特定元素的指令。目前我有:Javascript 隐藏来宾用户元素的指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我想创建一个可以为来宾用户隐藏特定元素的指令。目前我有: angular.module('someMod') .directive('premiumUser', premiumUser) .controller('PremiumUserCtrl', PremiumUserCtrl); function premiumUser () { return { restrict : 'A', link : premiumUserL
angular.module('someMod')
.directive('premiumUser', premiumUser)
.controller('PremiumUserCtrl', PremiumUserCtrl);
function premiumUser () {
return {
restrict : 'A',
link : premiumUserLink,
controller : 'PremiumUserCtrl',
};
}
function premiumUserLink (scope, element) {
if (!scope.checkLoggedIn())
element.hide();
}
function PremiumUserCtrl ($scope, sessionManager) {
$scope.checkLoggedIn = function () {
return sessionManager.isUserLoggedIn();
};
}
因此,当我将此指令应用于如下元素时:
<ANY premium-user></ANY>
function premiumUser ($animate) {
return {
restrict: 'A',
terminal: true,
priority: 600,
transclude: 'element',
link: function(scope, element, attrs, ctrl, transclude) {
if (scope.checkLoggedIn()) {
var childScope;
if (!childScope) {
childScope = scope.$new();
transclude(childScope, function(clone) {
$animate.enter(clone, element.parent(), element);
});
}
}
},
controller: 'PremiumUserCtrl'
};
}
它可以工作,但不会阻止目标指令的控制器初始化和执行onInit代码
如何修改此指令以防止控制器初始化
提前谢谢 如果我理解正确,ng If应该可以工作。我认为如果你只是使用一个作用域变量来检查它的可用性。然后将scope.var on指令标记放在模板中
element.hide()
仅设置CSS属性display:none
,因此任何指令及其控制器仍将初始化
我将实现一个定制的ng if
-指令,如下所示:
<ANY premium-user></ANY>
function premiumUser ($animate) {
return {
restrict: 'A',
terminal: true,
priority: 600,
transclude: 'element',
link: function(scope, element, attrs, ctrl, transclude) {
if (scope.checkLoggedIn()) {
var childScope;
if (!childScope) {
childScope = scope.$new();
transclude(childScope, function(clone) {
$animate.enter(clone, element.parent(), element);
});
}
}
},
controller: 'PremiumUserCtrl'
};
}
如果您有兴趣了解更多有关其工作原理的信息,请查看文档和源代码。您是否正在使用某些工具来处理路由?如果没有,可能值得使用(ui路由器)[。@alphapilgrim是的,我使用它,它如何帮助我?在定义状态的地方,状态有一个解析方法,可以在状态更改之前检查用户类型/凭据。@alphapilgrim我正在使用我的指令隐藏路由模板中的特定元素。如果我想避免来宾用户导航到经过身份验证的u页面,解析可以帮助我仅限sers。您使用的是angulars router还是defactor版本?Yep ng if在这里可以提供帮助,但它需要在使用我的指令的每个控制器上添加一个作用域方法。这就是我希望用指令实现它的主要原因。@xSaber可能只想使用rootScope.userType并将其设置为在在视图中或任何时候,statechange都可以按您设置的方式启动。