如何根据angular控制器修改HTML内容

How to modify HTML content based on angular controller

我正在尝试使用 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,我猜它不允许我在同一页面上使用多个控制器。

这是我的 html index.html 代码片段:

<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;
        }); 
    }

}]);

我不确定信息是否足够,请编辑或让我知道是否缺少某些信息。

我相信你将不得不将你的 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>

NavigationController

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