【问题标题】:Ng-model is not working as expected?Ng-model 没有按预期工作?
【发布时间】:2017-08-20 01:41:21
【问题描述】:

我有一个文本框,它使用ng-model=sampleValue 连接到 Angular js

现在,我的要求是每当我单击按钮时都应该执行显示功能,并且应该将文本框的值更改为 Harish。但这不是我得到的结果。请看一下我在下面写的代码:

var app = angular.module("myApp", [])

app.controller("mainController", [ "$scope", function($scope){
  $scope.show = function(){
    $scope.sampleValue = "Harish";
  }
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body ng-app = "myApp">
<input ng-controller="mainController" type="text" ng-model="sampleValue"/>
<button ng-click="show()">Click Here</button>
</body>

提前谢谢你:)

【问题讨论】:

    标签: javascript html angularjs model-view-controller angular-ngmodel


    【解决方案1】:

    事实是你在输入标签上使用了 ng-controller。所以在控制器功能内的输入标签之外将不起作用。你的js完全没问题。你只需要改变html

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <body ng-app = "myApp" >
        <input  type="text" ng-model="sampleValue"/>
        <button ng-click="show()">Click Here</button>
        </body>
    

    【讨论】:

      【解决方案2】:

      您的控制器范围仅限于输入文本框。

         <body ng-app = "myApp">
            <div ng-controller="mainController">
            <input  type="text" ng-model="sampleValue"/>
            <button ng-click="show()">Click Here</button>
            </div>
         </body>
      

      【讨论】:

        【解决方案3】:
        <!DOCTYPE html>
        <html>
        <head>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
            <title>Ang</title>
        </head>
        <body>
        <div ng-app="">
          <h1>Ng-show  ng-hide</h1>
          <p class="description">Click on the "show"-link to see the content.</p>
          <a href="" ng-click="showme=true">Show</a>
          <button ng-click="showme=false">Hide</button> 
        
          <div class="wrapper">
            <p ng-hide="showme">It will appear here!</p>
            <h2 ng-show="showme">This is mah content, yo!</h2>
          </div>
        
        </div>    
        
        </body>
        </html>
        

        尝试执行上面的代码,您可能会对您的代码有所了解。

        【讨论】:

          【解决方案4】:

          var app = angular.module("myApp", [])
          
          app.controller("mainController", [ "$scope", function($scope){
            $scope.show = function(){
              $scope.sampleValue = "Harish";
            }
          }]);
          <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
          <body ng-app = "myApp" ng-controller="mainController">
          <input  type="text" ng-model="sampleValue"/>
          <button ng-click="show()">Click Here</button>
          </body>

          你的 ng-controller 在输入端

          【讨论】:

            【解决方案5】:

            ng-controller 放在正文或某个父级div 中。你在input type中使用ng-controller

            试试这个

            <!DOCTYPE html>
            <html ng-app="myApp">
            
            <head>
            	<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
            	
            	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
            	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
            	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
            	<script type="text/javascript">
            
            		angular.module('myApp',[])
            		.controller('myCtrl', function myCtrl($scope,$filter) {
            
            
            			$scope.showValue = function(){
            				$scope.sampleValue = "Harish";
            			}
            		})
            
            
            
            	</script>
            
            </head>
            
            <body ng-controller="myCtrl">
            	<input type="text" ng-model="sampleValue"/>
            	<button ng-click="showValue()">Click Here</button>
            </body>
            
            </html>

            【讨论】:

            • 谢谢。但是把控制器放在父标签里面有什么区别呢??
            • 如果您将控制器放在父标签中,那么它将在所有子标签中可用,那么只有您可以从视图中访问controller,或者可以调用任何函数。
            【解决方案6】:

            目前您已经在输入元素上应用了ng-controller,这意味着控制器范围仅限于input DOM,因此show 方法不会被调用。您应该将ng-controller 移动到包装元素(这里是body)。

            <head>
                <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js">  </script>
                <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
            </head>
            <body ng-app="myApp" ng-controller="mainController">
            
              <input type="text" ng-model="sampleValue" />
              <button ng-click="show()">Click Here</button>
            </body>
            

            Plunker

            【讨论】:

              【解决方案7】:

              将 ng-controller 移动到 body 标签:

              var app = angular.module("myApp", [])
              
              app.controller("mainController", [ "$scope", function($scope){
                $scope.show = function(){
                  $scope.sampleValue = "Harish";
                }
              }]);
              <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
              <body ng-app = "myApp"  ng-controller="mainController">
              <input type="text" ng-model="sampleValue"/>
              <button ng-click="show()">Click Here</button>
              </body>

              【讨论】:

              • 这是可行的,但是将控制器放置在body标签和body标签内的元素中有什么区别?我猜两者应该是一样的??
              • ng 控制器必须在 ng 模型之前,因为模型变量或说范围在控制器之下
              猜你喜欢
              • 2018-04-24
              • 2014-10-14
              • 1970-01-01
              • 1970-01-01
              • 2015-08-02
              • 2017-03-23
              • 1970-01-01
              • 2015-11-12
              相关资源
              最近更新 更多