最近我接受了Angular作为一个学习活动.
我想传递一个方法来ng模型或一个表达式,可以评估一个.
在这个小提琴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",text: "Node.js"
},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++;
}
};
我已经尝试将ng-model =“getText(record)”按照https://groups.google.com/forum/#!topic/angular/Pef6LY2rT7g没有成功,另一个搜索结果是这个https://github.com/angular/angular.js/pull/1328,这对我来说同样没有帮助.
任何帮助将高度赞赏.
解决方法
您传入ng模型的任何内容都将被视为与范围有关的角度表达式.这意味着record.inner [0] .text被评估为$scope.record.inner [0] .text,然后使用该表达式的结果.当您使用getText(记录)时,角度计算$scope.getText(record),ng-model可以访问此评估的结果.请记住,ng模型不评估此函数调用的结果.
您的问题是您将结果作为角度表达式字符串返回,但从不评估它,所以ng-model被赋予一个不能使用的字符串.有很多方法来重新设计你的代码来处理这个问题,但是简单的(也可能不是最好的)方法是使用像ng-init这样的东西来获取函数调用的结果,然后把这个结果插入到ng-模型.看到这个小提琴的一个快速的例子http://jsfiddle.net/z5z9s/