页面更改时未正确调用AngularJs指令
AngularJs Directive does not get called correctly when page change
我的应用程序中有一个标头,它使用一个指令根据用户权限显示/隐藏链接,该指令使用一个返回布尔结果的解析承诺的服务。问题是标题导航链接没有正确显示/隐藏(它显示了以前用户可访问的链接,所以我假设没有调用该服务),当我使用chrome控制台进行调试时,我希望在服务或指令中显示一些日志,但什么都没有,我查看日志的唯一方法是重新加载页面。
指令:
.directive('hasAccess', ['PermissionsService', function( PermissionsService) {
return {
restrict: 'A',
scope: {
requiredAccess: "@",
requiredAccessFunc: '@'
},
link: function(scope, element, attrs) {
PermissionsService[scope.requiredAccessFunc](scope.requiredAccess, scope.locationId).then(function(bool) {
console.log("hasAccess");
if (!bool) {
element.addClass('hidden');
}
}, function(error) {
element.addClass('hidden');
});
}
};
}])
服务:
smps.checkSettingsAccess = function(settingName) {
console.log("checkSettingsAccess");
var deferred = $q.defer();
UserFactory.get().$promise.then (function(response) {
deferred.resolve(response[settingName]);
}, function() {
deferred.reject(response);
});
return deferred.promise;
}
标头指令:
.directive('header', function () {
return {
restrict: 'A',
replace: true,
templateUrl: "directives/header.html",
controller: ['$scope', '$filter', function ($scope, $filter) {
}]
}
})
标题html:
<li><a has-access required-access="company_access" required-access-func="checkSettingsAccess" ng-href="#/company_info">Company</a></li>
<li><a has-access required-access="locations_access" required-access-func="checkSettingsAccess" ng-href="#/locations">Locations</a></li>
<li><a has-access required-access="staff_members_access" required-access-func="checkSettingsAccess" ng-href="#/staff_members">Staff</a></li>
<li><a has-access required-access="customers_access" required-access-func="checkSettingsAccess" ng-href="#/customers">Customers</a></li>
<li><a has-access required-access="online_scheduling_access" required-access-func="checkSettingsAccess">Online Scheduling</a></li>
您的指令监视父作用域中的两个变量:
scope: {
requiredAccess: "@",
requiredAccessFunc: '@'
}
如果要呈现指令,则应更改此变量。因为你的指令取决于内部状态。
为什么smps.checkSettingsAccess
传递deferred.resolve();
或deferred.reject();
,而.then(function(bool)
接受布尔,你确定这是正确的吗?then
函数中bool
的值是多少?它可能是一个物体,因此总是真的?
我建议不要只是这样做:element.addClass('hidden');
你这样做:element.removeClass('hidden');
并将所有HTML默认内容设置为class='hidden'
,因为这是一个安全问题,在AJAX发生时应默认为隐藏。
到目前为止我所做的是:
- 删除hasAccess指令
- 将currentUser添加到rootScope,如:$rootScope.currentUser
- 使用currentUser询问给定的访问是真(显示)还是假(隐藏)
我知道。。。这不是最好的解决方案,因为它有点难看,但至少它有效。
我需要了解的是如何创建一个依赖于注入的服务的头指令(该服务通过rootScope使用ng资源),当rootScope.currentUser更改时,该指令应该能够以某种方式重新加载或赶上,以便在HTML中正确显示链接。
欢迎提出改进建议或任何意见。谢谢
<li><a ng-show="currentUser['company_access']" ng-href="#/company_info">Company</a></li>
<li><a ng-show="currentUser['locations_access']" ng-href="#/locations">Locations</a></li>
<li><a ng-show="currentUser['staff_members_access']" ng-href="#/staff_members">Staff</a></li>
<li><a ng-show="currentUser['customers_access']" ng-href="#/customers">Customers</a></li>
<li><a ng-show="currentUser['online_scheduling_access']">Online Scheduling</a></li>
- 尝试调用AngularJS上的函数时出错
- 如何使用onclick事件调用AngularJS控制器
- 在jQuery中调用AngularJS函数
- 在 html5 视频结束时调用 AngularJS 控制器函数
- 如何点击按钮调用angularJs服务
- 为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
- 调用AngularJS内部<脚本>标签
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 从Javascript调用AngularJS控制器
- 单击链接时不调用 AngularJs 控制器
- 异步调用 AngularJS 不适用于 Canvas HTML
- 从Javascript调用AngularJS方法
- 从遗留代码调用 AngularJS
- 如何从纯JavaScript方法调用AngularJS过滤器
- 未调用 AngularJS 模板 ng-change
- 正确处理调用 AngularJS $http中的错误
- 如何从事件处理程序调用 AngularJS 作用域定义的函数
- 如何从android webview调用AngularJS服务代码
- 为什么不是't正在调用AngularJS表单处理程序方法
- 未调用Angularjs资源工厂transformResponse