【问题标题】:How to use Controller action to set value of form field in AngularJS如何使用控制器动作在 AngularJS 中设置表单字段的值
【发布时间】:2014-02-02 22:21:59
【问题描述】:

如何通过控制器的操作手动设置表单字段的值?就我而言,我有一个包含大约 10 个字段的表单。一个表单字段是一个日期字段,它有一个用于将其值设置为当前日期的按钮,我通过服务获取该日期。我尝试过操作嵌套范围值,但无济于事。问题是在设置日期字段的值后,其他表单字段/范围值的值被破坏。为了说明问题,请参见下面的 JSfiddle 和代码。

JSFiddle to illustrate problem

<div ng:app>
    <form name="myForm" ng-controller="Ctrl">Age:
        <input type="text" data-ng-model="person.age" />
        <br/>First Name:
        <input type="text" data-ng-model="person.first_name" />
        <button ng-click="setFirstName()" type="button">Set First Name</button>
        <br/>Last Name:
        <input type="text" data-ng-model="person.last_name" />
        <button ng-click="setLastName()" type="button">Set Last Name</button>
        <br/>
    </form>
</div>





function Ctrl($scope) {
    $scope.setFirstName = function () {
        $scope.person = {
            first_name: 'King'
        }
    };

    $scope.setLastName = function () {
        $scope.person = {
            last_name: 'Kong'
        }
    };
}

【问题讨论】:

    标签: angularjs angularjs-scope


    【解决方案1】:

    每次调用 set 方法时,都会覆盖整个 person 对象引用。请注意您每次如何创建一个新对象。您最有可能的意图是:

    $scope.setFirstName = function(){
       $scope.person.first_name = 'King';
    }
    

    【讨论】:

    • 这行得通,但是在 JS 中这是否“正确”及其原型继承?请参阅这篇关于直接更新更高级别范围属性的帖子:jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html让我知道您的想法。
    • 只是想知道您是否对我之前分享的链接有回应?
    • @user1322092 在这种情况下,范围是暴露一个人对象,我在这里看不到任何风险。据我从您分享的文章中可以看出,如果您将firstName 直接放在范围内,就会出现问题。
    • @EdwinDalorzo:你能看一下这里吗,我想将对象设置为模型,它作为 json 保存到服务器,稍后打开时它会读取 json 并映射到模型。模型具有对象,但单选按钮未根据对象属性进行选择。 stackoverflow.com/questions/52168091/…
    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多