我的控制器太大了,所以决定把它分成几个功能。所以现在功能看不到输入值。你能建议我如何解决这个问题吗?
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;
}
}
答案 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
。除此之外,您未将值userDetails
和isvalid
值传递给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;
}
}
});