当前位置: 首页 > 面试题库 >

AngularJS使用全局变量更改类

魏英勋
2023-03-14
问题内容

我刚刚创建了angularJS应用程序。

这是我的 index.html

<html ng-app="MyApp">
  <head>
    <!-- CSS files import -->
  </head>
  <body class="{{bodylayout}}">
    <div ng-view></div>
  </body>
  <--! JS imports 
   aungular.js
   app.js
   login.js
   register.js
   -->
</html>

app.js

'use strict';
//Define Routing for app
angular.module('myApp', []).config(['$routeProvider', '$locationProvider',
  function($routeProvider,$locationProvider) {
    $routeProvider
    .when('/login', {
        templateUrl: 'login.html',
        controller: 'LoginController'
    })
    .when('/register', {
        templateUrl: 'register.html',
        controller: 'RegisterController'
      })
    .when('/forgotPassword', {
        templateUrl: 'forgotpassword.html',
        controller: 'forgotController'
      })
   .when('/home', {
       templateUrl: 'views/home.html',
    })
    .otherwise({
       redirectTo: '/login'
    });
//    $locationProvider.html5Mode(true); //Remove the '#' from URL.
}]);

我有login.html,register.html和forgotpassword.html,home.html。每个人在单独的文件中都有单独的控制器。login.js,register.js,forgot.js,home.js。

login.js

'use strict';

angular.module('myApp').controller('LoginController', function($scope, $location, $window) {
    $scope.user = {};
    $scope.loginUser=function()
    {
        var username=$scope.user.name;
        var password=$scope.user.password;
        if(username=="admin" && password=="admin123")
        {
            $location.path( "/home" );  
        }
        else
        {
            $scope.message="Error";
            $scope.messagecolor="alert alert-danger";
        }
    }
});

同样,我在其他控制器中也有post方法

我想要的是,当视图为登录或注册或忘记密码时,主体类应为"login- layout"。因此,我在正文中输入了class="{{bodylayout}}“。我知道可以使用全局变量来设置值。但是我不知道该怎么做。

app.js中, 我尝试了

angular.module('myApp').factory("myService", function(){

      return {
        sharedObject: { data: 'login-layout' }
      };

    });

但是不知道如何使用它。


问题答案:

您可以通过两种方式创建全局变量

  • $ rootScope //已经提到@imcg
  • 服务

使用$rootScope您可以在LoginController控制器中执行类似操作

angular.module('myApp').controller('LoginController', function($scope, $location, $window, $rootScope) {
   $scope.user = {};
   $rootScope.bodylayout = 'login-layout';

   //others code 
}

使用 service

angular.module('myApp').factory("myService", function(){

      return {
        sharedObject: { data: 'login-layout' }
      };

});

在控制器中使用此服务

angular.module('myApp').controller('LoginController', function($scope, $location, $window, myService) {
       $scope.user = {};
       $rootScope.bodylayout = myService.sharedObject.data; // get data from service

       //others code 
    }

HTML长什么样

<body class="{{bodylayout}}">

请注意, 在这种情况下,您需要bodylayout在每个控制器中进行设置,否则它将使用旧值



 类似资料:
  • 问题内容: 我在控制器的作用域上初始化变量时遇到问题。然后,当用户登录时,它将在另一个控制器中进行更改。此变量用于控制诸如导航栏之类的操作,并根据用户的类型来限制对网站某些部分的访问,因此保持其值很重要。它的问题是初始化它的控制器,再次通过某种方式被调用,然后将变量重置为其初始值。 我认为这不是声明和初始化全局变量的正确方法,也不是真正的全局变量,所以我的问题是什么是正确的方法,并且在使用当前版本

  • 问题内容: 我正在尝试创建一个分页类,并使用该类外部的变量。 但这给了我致命错误“在非对象上调用成员函数query()”。 这是索引文件: 这是pagi.php文件: 是否可以在类内部使用该变量,而无需在类内部创建新变量? 问题答案: 解决此问题的正确方法是将数据库对象注入另一个类(依赖项注入): 解决该问题的另一种方法是将数据库类的实例注入使用它的方法中: 您选择哪种方法取决于情况。如果只有一个

  • 问题内容: 我是Python和程序设计的新手,但似乎无法理解为什么此函数不更新全局变量 我也尝试过 问题答案: 需要声明的是是全球性的 内部 ,而不是外面。 该语句告诉Python,在函数范围内,它引用的是全局变量,而不是一些新的局部变量。

  • 如果你要多于一个函数共用一个简单的变量,简单的处理方法就是把这个变量在所有函数中定义为global全局变量。在命令行做同样的事情,如果你要工作空间访问上述变量。这个全局变量的定义必须出现在变量被应用于一个函数之前。虽然不是要求,但全局变量也最好以大写字母开头,这样可以同其他变量区别出来。举个例子,做一个以falling.m命名的M-文件。 function h = falling(t) globa

  • ThinkCMF封装了前台模板开发时常用的一些变量,这些变量是全局的,你在前台模板任何时候都能直接调用: {$site_name} /站点名称 {$site_host} /站点域名 {$site_root} /安装目录 {$site_icp} /