角度:为ng模型提供方法

Angular: Providing methods to ng-model

本文关键字:供方 方法 模型 ng 角度      更新时间:2023-09-26

我最近把Angular作为一个学习练习。

我想传递一个方法ng-model或一个可能计算为一个的表达式。

在这个小提琴 http://jsfiddle.net/C4aGk/你会看到我已经将字段硬编码为 ng-model="record.inner[0].text" 并且它有效,现在问题是,我想用运行时返回的东西替换硬编码的零,由标准选择,比如 id = 1 .

我的网页代码:

<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,这对我同样没有帮助。

任何帮助将不胜感激。

你传递到 ng-model 中的任何内容都会被评估为针对范围的角度表达式。这意味着record.inner[0].text被计算为$scope.record.inner[0].text,然后使用该表达式的结果。当你使用 getText(record) 时,角度评估$scope.getText(record),ng-model 可以访问此评估的结果。请记住,ng-model 不会评估此函数调用的结果。

您的问题是您将结果作为角度表达式字符串返回,但从未对其进行计算,因此 ng-model 被赋予了一个它无法使用的字符串。有很多方法可以重新设计代码来处理这个问题,但简单(可能不是最好的(方法是使用 ng-init 之类的东西来获取函数调用的结果,然后将该结果插入到 ng 模型中。有关快速示例,请参阅此小提琴 http://jsfiddle.net/z5z9s/