如何将first.js文件的一个控制器值传递给angularjs中的second.js文件的另一个控制器

时间:2017-02-20 09:09:57

标签: angularjs

  

你好我刚接触到angularjs,这里我有两个js文件,我需要通过   即使在一个js文件中的值到另一个js文件   angularjs.since我需要显示符合用户和的导航栏   管理员登录。

<form name="vm.loginForm" method="post" class="form-horizontal" data-ng-submit="vm.login(vm.getUser);">
                        <div class="col-xs-12 input-group">
                            <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
                            <input id="login-username" type="email" class="form-control" name="username" placeholder="Email" data-ng-model="vm.getUser.Username" required>
                        </div>
                        <div class="col-xs-12 input-group margin-top-20">
                            <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
                            <input id="login-password" type="password" class="form-control" name="password" placeholder="Password" data-ng-model="vm.getUser.Password" required value="admin">
                        </div>
                        <div class="col-xs-12 margin-top-20">
                            <span class="pull-left">
                                <input id="login-remember" type="checkbox" name="remember" value="1"> Remember me
                            </span>
                            <span class="pull-right">
                                <a href="#">Forgot Password?</a>
                            </span>
                        </div>
                        <div class="col-xs-12 margin-top-20">
                            <button type="submit" class="btn btn-block btn-success">
                                Login
                                <i class="fa fa-refresh fa-spin" ng-show="vm.login.progress"></i>
                            </button>
                        </div>
                    </form>
  

logincrl.js

login.controller("loginCtrl", ['$rootScope', '$scope', '$state', '$location', 'Flash', 'apiService', '$http',
    function($rootScope, $scope, $state, $location, Flash, apiService, $http) {
        var vm = this;
        $scope.title="Test";
        vm.login = function(data) {
            vm.login.progress=true;
            var url = "http://52.9.55.95:91/api/Login/ValidateUser?username=" + $scope.vm.getUser.Username + "&password=" + $scope.vm.getUser.Password;
            $http({method: 'GET', url: url}).
    success(function(data, status, headers, config) {

           $scope.RoleCode == data.RoleCode;

      vm.login.progress=false;
      $state.go('app.dashboard');

    }).
    error(function(data, status, headers, config) {
        vm.login.progress=false;
      swal({   title: "Warning!",   text: "Invalid User Credentials!",   type: "warning",   confirmButtonText: "OK" }); 

    });

        }


    }
]);
  

在这个js文件中我需要传递像$ scope.role =这样的值   data.RoleCode到另一个js文件。

appctrl.js

app.controller("appCtrl", ['$rootScope', '$scope', '$state', '$location', 'Flash', 'appSettings',
function ($rootScope, $scope, $state, $location, Flash, appSettings) {

if($scope.Rolecode == 01){
vm.menuItems = [
        // {
        //     title: "Dashboard",
        //     icon: "dashboard",
        //     state: "dashboard"
        // },
        {
            title: "Employees",
            icon: "users",
            state: "employees"
        },
        {
            title: "Customers",
            icon: "users",
            state: "customers"
        },
}else(Rolecode=02){
vm.menuItems = [ {
            title: "Customers",
            icon: "users",
            state: "customers"
        },
]}
]}]);
  

注意:根据登录信息,我需要显示菜单栏,RoleCode =   01表示Admin应显示,Rolecode = 02表示用户一次   显示请让我知道如何传递价值,请做一个   小提琴并给它很容易理解,

app.html
        <section class="sidebar">
            <!-- Sidebar user panel -->
            <ul class="sidebar-menu">
                <li class="treeview" ui-sref-active="active" ng-click="vm.sideBar();" data-ng-repeat="menu in vm.menuItems">
                    <a ui-sref="app.{{menu.state}}">
                        <i class="fa fa-{{menu.icon}}"></i> <span>{{menu.title}}</span>
                    </a>
                </li>
            </ul>
        </section>
  

任何人都可以帮助传递价值。在一个js到另一个js   文件不同的控制器和不同的文件

4 个答案:

答案 0 :(得分:1)

如果您只想存储Role值,可以使用$ rootScope.Role = data.RoleCode,然后将$ rootScope注入另一个控制器并获取$ rootScope.Role。 或者您可以使用$ emit和$ broadcast在控制器之间传递值,谷歌上有很多可用的材料。

答案 1 :(得分:1)

我会在这里使用list_1 = [] list_2 = [] for item in list_full: list_1.append(item[:2]) list_2.append(item[2:]) 执行此操作,您可以创建服务并将服务注入每个控制器,然后您可以使用角色,您可以在每个页面中访问此角色,它可以在每个控制器中重复使用

答案 2 :(得分:0)

您可以使用AngularJs服务将值从一个控制器传递到另一个控制器。假设您在不同的js文件中有firstCtrl,secondCtrl和yourService,那么您必须在index.html中添加对这些文件的引用。我提供了一个示例代码。希望你能从中得到一个想法。

的index.html

  <script src="firstCtrl.js"></script>
  <script src="secondCtrl.js "></script>
  <script src="yourService.js"></script>

控制器和服务

/* Assume firstCtrl in seperate js file */
angular.module('yourAppName').controller('firstCtrl', function($scope, yourService) {
  /*Set  data to service*/
  yourService.data = $scope.data;
});

/*End firstCtrl*/

/* Assume secondCtrl in seperate js file */
angular.module('yourAppName').controller('secondCtrl', function($scope, yourService) {
  /*Get data from service*/
  var data = yourService.data;
});

/*End secondCtrl*/

/* Assume yourService in seperate js file */
angular.module('yourAppName').factory('yourService', function() {
  var data = null;
  return {
    data: data
  }
});
/*End yourService*/

答案 3 :(得分:0)

我们可以创建一个{'a': 1, 'b': 4, 'c': 139}来设置和获取我们想要使用它的控制器函数中服务的servicecontrollers之间的数据。

服务:

inject

控制器:

<强> loginctrl.js

app.service('setGetData', function() {
  var data = '';
    getData: function() { return data; },
    setData: function(requestData) { data = requestData; }
});

<强> appctrl.js

app.controller('loginctrl', ['setGetData',function(setGetData) {

  // To set the data from the one controller
  $scope.RoleCode == data.RoleCode;  
  setGetData.setData($scope.RoleCode);

}]);

在这里,我们可以看到app.controller('appctrl', ['setGetData',function(setGetData) { // To get the data from the another controller var res = setGetData.getData(); console.log(res); }]); 用于设置数据,loginctrl用于获取数据。因此,我们可以将数据从一个控制器共享到另一个控制器。