我的html中有一个文本字段表单,我希望将其提取到控制器中。
目前它总是返回“未定义”
HTML:
<center>
<button ng-click="RequestSubmit()" class="button button-assertive">
Submit Request!
</button>
</center>
<label class="item item-input">
<span class="input-label">Remarks</span>
<input type="text" ng-model="remarkstext">
</label>
控制器:
.controller('ctrl', function($http, $scope, dataFactory) {
$scope.RequestSubmit = function($scope){
var t = $scope.remarkstext;
console.log("remarks: "+t);
删除函数()中的“$ scope”不起作用。可能是什么问题?
答案 0 :(得分:2)
试试这个plunker:
<强> HTML:强>
<div>
<input type="text" ng-model="remarkstext">
<button ng-click="RequestSubmit()" class="button button-assertive">
Submit Request!
</button>
</div>
<强> JS:强>
$scope.remarkstext='';
$scope.RequestSubmit = function(){
console.log($scope.remarkstext);
}
答案 1 :(得分:1)
使用此代码::
.controller('ctrl', function($http, $scope, dataFactory) {
$scope.RequestSubmit = function(){
var t = $scope.remarkstext;
console.log("remarks: "+t);
答案 2 :(得分:1)
正如@weirdpanda在评论中所说,您必须从$scope
函数中删除RequestSubmit
。请注意,此函数需要一个参数,并且您在没有任何人的情况下调用它。因此,在RequestSubmit
函数中,$scope
未定义。
关于你的控制器的定义,它并不坏,但考虑到如果你缩小你的代码它将无法工作,你应该这样定义:
.controller('ctrl', ['$http', '$scope', 'dataFactory', 'StoreService', function($http, $scope, dataFactory, StoreService) {
...
}]);
答案 3 :(得分:1)
@jjimenez非常正确地提到你正在使用一个函数,它需要一个参数而不传递任何参数。这使得AngularJS的内部混淆,因为它可能将其视为一种特殊的扩展函数。
您 从功能中删除$scope
;此外,一个非常常见的编码标准是(它实际上使代码更易读,更容易使用):
.controller( 'ctrl', [ '$scope', '$http', 'dataFactory', function( $scope,
$http,
dataFactory ) {
$scope.RequestSubmit = function() {
console.log( "Remarks: " + $scope.remarkstext );
};
// ... rest of the logic
}] );
在缩小之后,旧代码将不起作用,因为当UglifyJS(或等效物)缩小它时,它会将保留变量$scope
等重命名为e
{{1}或者其他什么,Angular无法解决;当你使用a
(我忘了它的具体名称)时,angular知道要注入什么,只有名字已经改变。
出现问题,有一件事可能是你在填写文本之前试图点击按钮;正如您可以阅读我的一个答案here,我已经解释了array notation
的工作原理。给那个读,然后检查!
如果可能,您能否告诉我们您如何定义控制器;在HTML的上下文中。
答案 4 :(得分:0)
如果你不想使用$ scope.remarkstext,那么传递remarkstext in NG-点击。
注意:如果要访问控制器中的模型值,则必须使用$ scope.remarkstext。
您直接使用 remarkstext ,因此会出错 未定义。
如果你想要参数
的值,请使用这样的方法的
的<center>
<button ng-click="RequestSubmit(remarkstext)" class="button button-assertive">
Submit Request!
</button>
</center>
<label class="item item-input">
<span class="input-label">Remarks</span>
<input type="text" ng-model="remarkstext">
</label>
的 的 的
的$scope.RequestSubmit = function(remarkstext){
var t = remarkstext;
console.log("remarks: "+t);
}
的
你的错误
的
的$scope.RequestSubmit = function($scope){
var t = $scope.remarkstext;
console.log("remarks: "+t);
}
的
我不明白你在函数参数中使用$ scope的原因 您可以直接在函数内部使用$ scope.remarkstext。而remarkstext在 ng-model 中,因此可以在 $ scope 。ng-inspector 中查看范围树控制台。