如何使用angularjs在函数内获取$ scope值

时间:2016-10-20 08:48:34

标签: javascript angularjs

我有一个分页代码,我应该在同一个控制器中重复使用,并考虑将它放在一个函数中。但它没有像我预期的那样工作。始终发送错误,指出某些值未定义。

我如何实现这一目标。

(function () {
    'use strict';

    angular
        .module('efutures.hr.controllers.creation', [])
        .controller('UserCreateController', UserCreateController);

    UserCreateController.$inject = ['$scope', '$location', '$rootScope', '$http', 'deptService', 'DeptNameService','EmployeeService'];

    function UserCreateController($scope, $location, $rootScope, $http, deptService, DeptNameService, EmployeeService) {

        (function initController() {
            deptService.getdepts(function (res) {

                $scope.depts = JSON.parse(res.data);
            });

            EmployeeService.GetEmpDetails(function (res) {
                $scope.FilterDetails = JSON.parse(res.data);   //This is the variable that I need inside the function.            

                $scope.PaginationTrigger($scope.FilterDetails); //CODE APPLIED HERE

            });
        })();

        $scope.reset = function () {

            $('#depts').val('').trigger('change.select2');
            EmployeeService.GetEmpDetails(function (res) {
                $scope.FilterDetails = JSON.parse(res.data);
            });
        };

        $scope.paginationTrigger =function(details){ //This method is used to control the pagination
             $scope.nums = ["10", "20", "30"];
                $scope.viewBy = $scope.nums[0];
                $scope.totalEmployees = $scope.details.length;
                $scope.currentPage = 1;
                $scope.itemsPerPage = $scope.viewBy;
                $scope.maxSize = 5;

                $scope.setPage = function (pageNo) {
                    $scope.currentPage = pageNo;
                };

                $scope.pageChanged = function () {
                    console.log('Page changed to: ' + $scope.currentPage);
                }

                $scope.setEmployeesPerPage = function (num) {
                    $scope.itemsPerPage = num;
                    $scope.currentPage = 1;
                }
        }

        $scope.DropdownSelected = function (value) {
            console.log(value.DeptName + ' Selected');

            var DeptNameChanged = {
                'Name': value
            };

            DeptNameService.DeptNameValue(DeptNameChanged, function (res) {

                $scope.FilterDetails = JSON.parse(res.data);

                $scope.PaginationTrigger($scope.FilterDetails); //CODE APPLIED HERE

            });


        };
    }
})();
  

根据上面的代码,错误是:angular.js:13642 TypeError:   无法读取未定义的属性“长度”

那我怎么能做到这一点?帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:0)



test = {"a" : 1}
details = "a"
alert(test[details])




使用$scope[details].length,因为details是参数。

$scope.paginationTrigger =function(details){ //This method is used to control the pagination
         $scope.nums = ["10", "20", "30"];
            $scope.viewBy = $scope.nums[0];
            $scope.totalEmployees = $scope[details].length;
            $scope.currentPage = 1;
            $scope.itemsPerPage = $scope.viewBy;
            $scope.maxSize = 5;

            $scope.setPage = function (pageNo) {
                $scope.currentPage = pageNo;
            };

            $scope.pageChanged = function () {
                console.log('Page changed to: ' + $scope.currentPage);
            }

            $scope.setEmployeesPerPage = function (num) {
                $scope.itemsPerPage = num;
                $scope.currentPage = 1;
            }
    }

请查看代码段,您将收到错误。

答案 1 :(得分:0)

我终于弄清楚了。这是我试图完成的并且它是成功的。特别感谢@Sravan一再试图帮助我。也谢谢大家的帮助。

所以这里是代码。分享学习的想法。

//Create a function in the controller
function paginationTrigger(value) {

    $scope.nums = ["10", "20", "30"];
    $scope.viewBy = $scope.nums[0];
    $scope.totalEmployees = value.length;
    $scope.currentPage = 1;
    $scope.itemsPerPage = $scope.viewBy;
    $scope.maxSize = 5;

    $scope.setPage = function (pageNo) {
        $scope.currentPage = pageNo;
    };

    $scope.pageChanged = function () {
        console.log('Page changed to: ' + $scope.currentPage);
    }

    $scope.setEmployeesPerPage = function (num) {
        $scope.itemsPerPage = num;
        $scope.currentPage = 1;
    }
}

/* Call the function in the desired palce.
In this case inside my service function  */

EmployeeService.GetEmpDetails(function (res) {
    $scope.FilterDetails = JSON.parse(res.data);
    //pagination code
    paginationTrigger($scope.FilterDetails); //Passing the value

});