【问题标题】:How to modify HTML content based on angular controller如何基于角度控制器修改 HTML 内容
【发布时间】:2015-09-25 10:16:55
【问题描述】:

我正在尝试使用 angularjs SPA 构建登录页面和功能页面。

I have following controller:
 - LoginController 
 - PredictionController

And following single page:
 - Home.html : Binded to LoginController
 - trend.html : Binded to PredictionController
 - index.html : Has no controller

我在 index.html 中有导航面板,我想根据登录名修改(添加或删除)选项卡的数量。我不想在每个页面中编写导航面板逻辑,因为它是可重用的。我无法弄清楚使用附加控制器的方法,因为我使用的是 ng-route,我猜这不会允许我对同一页面使用多个控制器。

这是我的 index.html 的 html 代码 sn-p:

<body>
        <nav class="navbar navbar-inverse navbar-fixed-top">
            <div class="container-fluid">
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                  </button>
                  <a class="navbar-brand" href="#/">MyProject</a>

                </div>
                <div id="navbar" class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#/">Home</a></li>
                        <li><a href="#Trend">Trend</a></li>
                    </ul>
                </div><!--/.nav-collapse -->
            </div>
        </nav>

    <div ng-app="chartApp">
        <div ng-view></div>                         
    </div>

</body>

这是控制器的代码:

var app = angular.module('chartApp', ['ngRoute']);

    app.factory('UserVerified', function() {
        return

 {bool: false}; 
        });


    app.config(function ($routeProvider) {
        $routeProvider
        .when('/',{
            templateUrl: 'pages/home.html',
            controller: 'LoginController'
        })
        .when('/Trend', {
            templateUrl: 'pages/trend.html',
            controller: 'PredictionController'  
        })  

    });

    app.controller('LoginController', ['$scope', '$http', 'UserVerified', function($scope, $http, UserVerified){
        $scope.hasPermission = UserVerified.bool;

    $scope.getAuthentication = function(){
        console.log($scope.userId, $scope.pwd)
        $http.get('/getAuth', {
                params: { user_id: $scope.userId, pwd: $scope.pwd }
        }).success(function (response){
            console.log(response);
            UserVerified.bool = response;
            $scope.hasPermission = UserVerified.bool;
        }); 
    }

}]);

我不确定信息是否足够,如果我遗漏了一些信息,请编辑或告诉我。

【问题讨论】:

    标签: angularjs single-page-application ngroute


    【解决方案1】:

    我相信您将不得不将您的 ng-app 指令移到正文中,并创建一个 NavigationController 这可能需要您的 UserVerified 工厂并帮助维护导航状态。

    您可以将ng-controller 指令显式添加到您的navbar,并且您的路由器应该可以正常工作。

    HTML 可能看起来像这样。

    <body ng-app="chartApp">
    
        <nav ng-controller="NavigationController" class="navbar navbar-inverse navbar-fixed-top">
            <div class="container-fluid">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
    
                    <!-- Only display if $scope.loggedIn -->
                    <a ng-show="loggedIn" class="navbar-brand" href="#/">MyProject</a>
                </div>
    
                <div id="navbar" class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#/">Home</a></li>
                        <li><a href="#Trend">Trend</a></li>
                    </ul>
                </div><!--/.nav-collapse -->
            </div>
        </nav>
    
        <div ng-view></div>
    </body>
    

    导航控制器

    app.controller('NavigationController', function($scope, UserVerified) {
        $scope.$watch(function() {
            return UserVerified.bool;
        }, function(state, oldState) {
            $scope.loggedIn = state;
        });
    });
    

    【讨论】:

    • 我想过,但在这种情况下,页面和控制器的路由将如何工作?加载 login.html 时,我将需要一个用于登录的控制器,所以在这种情况下,ngroute 将如何理解指向的位置。
    • 我用一个例子更新了我的答案。路由器应该完全一样的工作,它会自动在每个路由上加载控制器。
    • 它按照我的要求工作,但是当我登录时,它不会使它们可见,因为 '$scope.loggedIn' 没有得到更新。
    • 更新了代码示例。您可能需要添加一个 $watcher 以使控制器与服务保持同步。 See here.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多