用户可以看到一个选项列表(例如:1.Apple; 2.Banana; 3.Mango)。有一个文本框,其中用户在所需选项中键入并单击发送以继续进行。
现有设置:
HTML:
<p ng-repeat="opt in objHistory.OptionItems track by $index">
{{ opt.SortOrder }}. {{ opt.OptionName }}
</p>
<textarea ng-model="userInput"></textarea>
<a href="javascript:;" ng-click="GetNextItem()">Send</a>
JS:
$scope.GetNextItem = function () {
alert($scope.userInput);
//some code
}
上面的代码运行良好。但是现在我已经将选项更改为锚标签,因此用户可以点击它们,而不是键入,然后是相同的流程。
新HTML:
<p ng-repeat="opt in objHistory.OptionItems track by $index">
<a href="javascript:;"
ng-model = "userInput"
ng-init="userInput=opt.SortOrder"
ng-click="GetNextItem()">{{ opt.SortOrder }}. {{ opt.OptionName }}
</a>
</p>
我现在在警报中获得undefined
。我哪里错了?是否可以多次使用相同的ng-model
变量名称(我将其用于textbox
以及anchor
标记)?
答案 0 :(得分:2)
ng-model
不能用于锚标记。根据文件:
ngModel
指令使用input
将select
,textarea
,NgModelController
(或自定义表单控件)绑定到作用域上的属性,这是ngModel
由该指令创建和公开。
为什么在锚标记上使用{{1}}?
对不起,没有足够的代表发表评论
答案 1 :(得分:1)
您正在尝试在Angular完成分配之前读取设定值。
HTML:
<p ng-repeat="opt in objHistory.OptionItems track by $index">
<a href="javascript:;"
ng-model = "userInput"
ng-init="init(opt)"
ng-click="GetNextItem()">{{ opt.SortOrder }}. {{ opt.OptionName }}
</a>
</p>
<textarea ng-model="userInput"></textarea>
控制器:
angular.module("app",[]).controller("MainController", function($scope) {
$scope.GetNextItem = function () {
alert($scope.userInput);
//some code
};
$scope.init = function(opt) {
$scope.userInput = opt.SortOrder; // set it in the init method
};
$scope.objHistory = {
OptionItems: [{
SortOrder : "1",
OptionName: "Hi"
}, {
SortOrder : "2",
OptionName: "Hi"
}]
}
});
<强> Working DEMO 强>
根据评论更新:
$scope.GetNextItem = function (opt) {
$scope.userInput = opt.SortOrder;
//some code
};
现在在您的HTML中:
<p ng-repeat="opt in objHistory.OptionItems track by $index">
<a href="javascript:;"
ng-click="GetNextItem(opt)">{{ opt.SortOrder }}. {{ opt.OptionName }}
</a>
</p>
答案 2 :(得分:0)
将ng-model
移至父<p>