最近我接受了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/