我最近接受了Angular的学习练习。
我想将一个方法传递给ng-model
或一个可能评估为一个的表达式。
在这个小提琴http://jsfiddle.net/C4aGk/中,您会看到我已将该字段硬编码为ng-model="record.inner[0].text"
并且它可以正常工作,现在问题是,我想用硬编码的零替换在运行时返回的内容,由标准id = 1
选择。
我的HTML代码:
<div ng-controller="MainController" ng-app>
<div ng-repeat="record in records">
<input ng-model="record.inner[0].text"> <span>{{record.outer}}</span>
<div ng-repeat="nested in record.inner">{{nested.id}} - {{nested.text}}</div>
<hr />
</div>
</div>
<br/>
和相应的js:
function MainController($scope) {
$scope.records = [{
outer: "Hello",
inner: [{
id: 1,
text: "Angular"
}, {
id: 2,
text: "jQuery"
}]
}, {
outer: "World",
inner: [{
id: 1,
text: "Node.js"
}, {
id: 2,
text: "Underscore.js"
}]
}];
$scope.getText = function (record) {
var index = 0;
for (nested in record.inner) {
if (nested.id === 1) {
return "record.inner[" + index + "].text";
}
index++;
}
};
我已尝试根据https://groups.google.com/forum/#!topic/angular/Pef6LY2rT7g放置ng-model="getText(record)"
但没有成功,另一次搜索显示https://github.com/angular/angular.js/pull/1328这对我同样无益。
任何帮助都将受到高度赞赏。
答案 0 :(得分:11)
您传入ng-model的任何内容都将被评估为针对范围的角度表达式。这意味着record.inner[0].text
被评估为$scope.record.inner[0].text
,然后使用该表达式的结果。当您使用getText(record)
时,angular会对$scope.getText(record)
进行评估,并且ng-model可以访问此评估的结果。请记住,ng-model不会评估此函数调用的结果。
您的问题是您将结果作为角度表达式字符串返回,但从未对其进行评估,因此为ng-model提供了一个不能使用的字符串。有很多方法可以重新设计代码来处理这个问题,但简单(也可能不是最好的)方法是使用类似ng-init的方法来获取函数调用的结果,然后将结果插入到ng-模型。请参阅此小提琴,以获取快速示例http://jsfiddle.net/z5z9s/