Angular:获取js函数

时间:2016-05-11 09:53:08

标签: javascript angularjs

我的控制器太大了,所以决定把它分成几个功能。所以现在功能看不到输入值。你能建议我如何解决这个问题吗?

angular.module("sampleApp", [])
    .controller("defaultCtrl", function ($scope) {

        $scope.addNewUser = function (userDetails, isvalid) {
          doLogin();
        }

    });

var doLogin = function(userDetails, isvalid) {
            if (isvalid) {
                $scope.message = userDetails.name + " " + userDetails.email;
            }
            else {
                $scope.message = "Error";
                $scope.showError = true;
            }
} 

http://plnkr.co/edit/Rv6dqTECeD62HA1SgDM9?p=preview

3 个答案:

答案 0 :(得分:3)

调用函数时,应传递参数

$scope.addNewUser = function (userDetails, isvalid) {
    doLogin(userDetails, isvalid,$scope);
}

var doLogin = function(userDetails, isvalid, $scope) {
    //...
}

http://plnkr.co/edit/G66gFmJVhiXljyxgLDLP?p=preview

编辑:获取用户名长度更新doLogin功能:

    var doLogin = function(userDetails, isvalid, $scope) {
                if (userDetails)
                   console.log(userDetails.name.length)
                //..
    }    

答案 1 :(得分:2)

您已将控制器分解为多个功能。然而

var doLogin = function(userDetails, isvalid) {
            if (isvalid) {
                $scope.message = userDetails.name + " " + userDetails.email;
            }
            else {
                $scope.message = "Error";
                $scope.showError = true;
            }
}

超出了控制器的$范围

  

“defaultCtrl”

因此,如果您想拥有更小的控制器,您可以拥有多个控制器并使用角度工厂进行通信。

说实话。我认为您应该使用相同的控制器来“控制”与登录表单相关的所有内容。

答案 2 :(得分:0)

您已在控制器外编写功能,因此$scope功能无法使用doLogin。除此之外,您未将值userDetailsisvalid值传递给doLogin来电。

用以下代码替换您的代码:

angular.module("sampleApp", [])
    .controller("defaultCtrl", function ($scope) {
        $scope.addNewUser = function (userDetails, isvalid) {
          doLogin(userDetails, isvalid);
        }
        var doLogin = function(userDetails, isvalid) {
            if (isvalid) {
                $scope.message = userDetails.name + " " + userDetails.email;
            }
            else {
                $scope.message = "Error";
                $scope.showError = true;
            }
    } 
});