AngularJS $scope.variable 未定义
AngularJS $scope.variable is undefined
请原谅我的新手,但我想不通。为什么单击提交表单时我的 $scope.new_prompt 未定义?我可以在输入时看到变量正在更新(在 <p>{{new_prompt}}</p>
中),但是当我单击提交时,控制台记录 'undefined'.
查看:
<div class="panel" ng-if="isAuthenticated()">
<div class="panel-body">
<h2 class="text-center">Add a prompt</h2>
<form method="post" ng-submit="submitPrompt()" name="promptForm">
<div class="form-group has-feedback">
<input class="form-control input-lg" type="text" name="prompt" ng-model="new_prompt" placeholder="Imagine if..." required autofocus>
<span class="ion-edit form-control-feedback"></span>
</div>
<p>{{new_prompt}}</p>
<button type="submit" ng-disabled="promptForm.$invalid" class="btn btn-lg btn-block btn-success">Add prompt</button>
</form>
</div>
</div>
控制器:
angular.module('Prompts')
.controller('HomeCtrl', ['$scope', '$auth', 'Prompt', '$alert', '$rootScope',
function($scope, $auth, Prompt, $alert, $rootScope) {
$scope.isAuthenticated = function() {
return $auth.isAuthenticated();
};
$scope.submitPrompt = function() {
console.log($scope.new_prompt);
Prompt.submitPrompt({
idea: $scope.new_prompt,
user: $rootScope.user
}).then(function() {
$alert({
content: 'Prompt has been added',
animation: 'fadeZoomFadeDown',
type: 'material',
duration: 3
});
});
};
$scope.stories = [{
prompt: 'Prompt 1',
author: 'blank',
upvotes: 0
}, {
prompt: 'Prompt 2',
author: 'klanb',
upvotes: 1
}, {
prompt: 'Prompt 3',
author: 'balbunk',
upvotes: 2
}, ];
}
]);
编辑:
Ved 的解决方案成功了。现在我不明白为什么在这个工作时必须这样做:
<div class="panel">
<form ng-submit="printText()">
<input type="text" ng-model="justTest">
<button type="submit" class="btn"></button>
</form>
</div>
$scope.printText = function() {
console.log($scope.justTest)
};
编辑的工作示例:http://jsfiddle.net/fuczak/dLcLkycb/
编辑 2:
问题出在 ng-if 指令中。它创建自己的子作用域,这就是 'new_prompt' 所在的位置,而不是在父 HomeCtrl 作用域中。
有两种方法可以解决你的错误。
案例 1:将您的模型作为参数传递给函数:
HTML:
<form method="post" ng-submit="submitPrompt(new_prompt)" name="promptForm">
JavaScript:
$scope.submitPrompt = function(data) {
$scope.new_prompt=data;
console.log($scope.new_prompt);
Prompt.submitPrompt({
idea: $scope.new_prompt,
user: $rootScope.user
}).then(function() {
$alert({
content: 'Prompt has been added',
animation: 'fadeZoomFadeDown',
type: 'material',
duration: 3
});
});
};
案例 2:定义:scope.new_prompt= {},
在您的控制器中
请原谅我的新手,但我想不通。为什么单击提交表单时我的 $scope.new_prompt 未定义?我可以在输入时看到变量正在更新(在 <p>{{new_prompt}}</p>
中),但是当我单击提交时,控制台记录 'undefined'.
查看:
<div class="panel" ng-if="isAuthenticated()">
<div class="panel-body">
<h2 class="text-center">Add a prompt</h2>
<form method="post" ng-submit="submitPrompt()" name="promptForm">
<div class="form-group has-feedback">
<input class="form-control input-lg" type="text" name="prompt" ng-model="new_prompt" placeholder="Imagine if..." required autofocus>
<span class="ion-edit form-control-feedback"></span>
</div>
<p>{{new_prompt}}</p>
<button type="submit" ng-disabled="promptForm.$invalid" class="btn btn-lg btn-block btn-success">Add prompt</button>
</form>
</div>
</div>
控制器:
angular.module('Prompts')
.controller('HomeCtrl', ['$scope', '$auth', 'Prompt', '$alert', '$rootScope',
function($scope, $auth, Prompt, $alert, $rootScope) {
$scope.isAuthenticated = function() {
return $auth.isAuthenticated();
};
$scope.submitPrompt = function() {
console.log($scope.new_prompt);
Prompt.submitPrompt({
idea: $scope.new_prompt,
user: $rootScope.user
}).then(function() {
$alert({
content: 'Prompt has been added',
animation: 'fadeZoomFadeDown',
type: 'material',
duration: 3
});
});
};
$scope.stories = [{
prompt: 'Prompt 1',
author: 'blank',
upvotes: 0
}, {
prompt: 'Prompt 2',
author: 'klanb',
upvotes: 1
}, {
prompt: 'Prompt 3',
author: 'balbunk',
upvotes: 2
}, ];
}
]);
编辑:
Ved 的解决方案成功了。现在我不明白为什么在这个工作时必须这样做:
<div class="panel">
<form ng-submit="printText()">
<input type="text" ng-model="justTest">
<button type="submit" class="btn"></button>
</form>
</div>
$scope.printText = function() {
console.log($scope.justTest)
};
编辑的工作示例:http://jsfiddle.net/fuczak/dLcLkycb/
编辑 2:
问题出在 ng-if 指令中。它创建自己的子作用域,这就是 'new_prompt' 所在的位置,而不是在父 HomeCtrl 作用域中。
有两种方法可以解决你的错误。
案例 1:将您的模型作为参数传递给函数:
HTML:
<form method="post" ng-submit="submitPrompt(new_prompt)" name="promptForm">
JavaScript:
$scope.submitPrompt = function(data) {
$scope.new_prompt=data;
console.log($scope.new_prompt);
Prompt.submitPrompt({
idea: $scope.new_prompt,
user: $rootScope.user
}).then(function() {
$alert({
content: 'Prompt has been added',
animation: 'fadeZoomFadeDown',
type: 'material',
duration: 3
});
});
};
案例 2:定义:scope.new_prompt= {},
在您的控制器中