根据条件(Angularjs)允许用户访问URL

Give user access to URL based on condition (Angularjs)

本文关键字:用户 访问 URL 许用户 Angularjs 条件      更新时间:2024-02-04

这是下面stakoverflow问题的延续

为相同<设置不同的超链接;a>标签(使用AngularJs)

我有两个URL,如下所示。Pre.html和Block.html

<ul class="dropdown-menu">
                <li><a ng-model="data" ng-href="{{ data ? 'Pre.html' : 'Block.html' }}" target="_blank">Pre or Bloc</a></li> 
</ul>

这基本上是检查控制器中数据的值,如果$scope.data为true,则加载Pre.html。如果$scope.data为false,它将加载Block.html。

因此,有了这个,我可以实现以下

1) 用户点击链接。如果控制器的"数据"值为假,则向用户显示块页面

2) 用户点击链接。如果控制器上的"data"值为true,则会向用户显示pre.html页面。

但是,当用户在URL中键入链接时,即使$scope.data设置为false,他仍然可以访问Pre.html。

当$scope.data设置为false时,我如何阻止此URL访问。>任何建议

这是不可能实现的,因为当用户自己输入URL时;您的$scope发生更改,无法再访问。

一种解决方法是在$window变量中设置值;这可以从您为Pre.html定义的控制器进行ping。

例如:

var controllers = angular.module('controllers', []);
controllers.controller('PageCtrl', [ '$scope', '$window', $location, function($scope, $window, $location) {
    if (some condition) {
        $window.sessionStorage.data = true
    } else {
        $window.sessionStorage.data = false
    }
}

如果条件为false,只需将用户重定向回上一页或默认主页即可。

controllers.controller('PreCtrl', [ '$scope', '$window', $location, function($scope, $window, $location) {
    if ($window.sessionStorage.data) {
        // Do something?
    } else {
        $location.path('#/home');
    }
}