Angular:为ng-model提供方法

ade*_*elx 10 javascript angularjs

我最近接受了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/>
Run Code Online (Sandbox Code Playgroud)

和相应的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++;
        }
    };
Run Code Online (Sandbox Code Playgroud)

我已经尝试ng-model="getText(record)"按照https://groups.google.com/forum/#!topic/angular/Pef6LY2rT7g放置但没有成功,另一个搜索出现了这个https://github.com/angular/angular.js/拉/ 1328对我来说同样无益.

任何帮助将受到高度赞赏.

Jon*_*on7 11

您传入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/

  • 我不认为`ng-model ="{{scopeFunctionThatReturnsAString()}}"`应该有效.你有一个例子吗? (2认同)