【问题标题】:Having trouble using ngChange to update model使用 ngChange 更新模型时遇到问题
【发布时间】:2015-08-18 23:30:22
【问题描述】:

我刚开始学习 Angular 的基础知识。我正在尝试制作年薪转换器,只是为了好玩。当用户更改年度模型时,我的每月 ng-model 更新有困难。这些字段是输入标签。这是代码

    <!doctype html>
<html ng-app="salaryApp">
    <head>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container" ng-controller="converter">
            <h1>Salary converter</h1>
            <div class="form-group">
                <label>Annual Salary</label>
                <input type="number" class="form-control" placeholder="0" ng-model="yearly" ng-change="reCalculate()" >
                <br>
                <label>Monthly Salary</label>
                <input type="number" class="form-control" placeholder="0" ng-model="monthly" disabled>
            </div>

        </div>
        <!--<div ng-controller="converter">
            Write some text in textbox:
            <input type="text">

            <h1>Hello {{ yearly }}</h1>
            <h1>Hello {{ monthly }}</h1>
        </div>-->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
        <!--<script src="salaryConverter.js"></script>-->
        <script type="text/javascript">
            var app = angular.module('salaryApp', []);



app.controller('converter', function($scope) {
  $scope.yearly = 80000;
  console.log("log1");
  $scope.monthly = $scope.yearly / 12;
  console.log("log2");

    function reCalculate() {
        console.log("function was run");
        return $scope.yearly /12.00;

  }

});
</script>

    </body>
</html>

这里是 plnkr http://plnkr.co/edit/26y0JRR7iVcrLOBlm7D2?p=preview

【问题讨论】:

    标签: javascript angularjs angular-ngmodel angularjs-ng-change ng-controller


    【解决方案1】:
    app.controller('converter', function($scope) {
      $scope.yearly = 80000;
      console.log("log1");
      $scope.monthly = $scope.yearly / 12;
      console.log("log2");
    
        $scope.reCalculate = function () {
            console.log("function was run");
            $scope.monthly = $scope.yearly / 12;
    
      }
    
    });
    

    这是你的plunker 工作

    【讨论】:

      【解决方案2】:

      您需要将 reCalculate 方法添加到您的范围:

      app.controller('converter', function($scope) {
        $scope.yearly = 80000;
        $scope.reCalculate = reCalculate; <--- THIS LINE
        console.log("log1");
        $scope.monthly = $scope.yearly / 12;
        console.log("log2");
      
          function reCalculate() {
              console.log("function was run");
              return $scope.yearly /12.00;
      
        }
      
      });
      

      你也可以直接添加:

      $scope.reCalculate = function()...
      

      但我建议遵循一些关于如何编写控制器的样式指南: https://github.com/johnpapa/angular-styleguide

      【讨论】:

        【解决方案3】:

        将函数定义为$scope,以便从视图中调用并将值分配给monthly,而不是返回。

        $scope.reCalculate = function () {
            console.log("function was run");
            $scope.monthly = $scope.yearly / 12.00;
        }
        

        DEMO

        【讨论】:

          【解决方案4】:

          您需要将其用作scope 属性。这里:

          function reCalculate() {
                  console.log("function was run");
                  return $scope.yearly /12.00;
          
            }
          

          应该是

            $scope.reCalculate = function () {
                  console.log("function was run");
                  $scope.monthly=$scope.yearly /12.00;//Don't return, you neet to assign
          
            }
          

          【讨论】:

          • 谢谢泽!太简单!我阅读了很多次文档,但错过了具体细节。
          • @squid267 NP。很高兴帮助:)
          猜你喜欢
          • 2015-08-11
          • 2020-11-29
          • 2020-11-10
          • 2019-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-07
          相关资源
          最近更新 更多