【问题标题】:Give user access to URL based on condition (Angularjs)根据条件授予用户对 URL 的访问权限(Angularjs)
【发布时间】:2016-04-05 18:31:30
【问题描述】:

这是下面 stakoverflow 问题的延续

Set different hyperlink for same <a> tag (Using AngularJs)

我有 2 个网址,如下所示。 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 为真,则加载 Pre.html。如果 $scope.data 为 false,它会加载 Block.html。

所以,有了这个,我能够实现以下目标

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

2) 用户点击链接。如果“数据”的值在控制器上为真,则会向用户显示 pre.html 页面。

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

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

【问题讨论】:

  • 您需要在路由控制器中添加逻辑,以防止用户看到页面或在数据和页面不匹配时重新路由。

标签: javascript html angularjs url


【解决方案1】:

这将无法实现,因为当用户自己输入 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
    }
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多