当使用jQuery设置值时,ng模型不起作用

ng-model not working when value set using jQuery

本文关键字:ng 模型 不起作用 jQuery 设置      更新时间:2023-12-02

我有一个带有一些表单控件的引导弹出对话框。每个控件使用ng模型进行绑定。对于对话框中的两个文本框,当对话框打开时,我使用jquery设置值,其余两个都是用户可编辑的。两个用户可编辑的ng模型运行良好。但对其他人来说,情况并非如此。如果我自己改变价值,它们就会正常工作。但当使用jQuery设置值时则不会。我必须使用jquery设置值。过去几天的挣扎。任何帮助都将不胜感激。这是我的代码

<body ng-app="my-app" ng-controller="Ctrl">
<div class="container">
  <h3>Modal Example</h3>
  <!-- Button to trigger modal -->
  <div>
    <a href="#contactUser" role="button" class="btn" data-toggle="modal">Launch Modal</a>
  </div>
  <!-- Modal -->

  <div id="contactUser" class="modal fade openDilog" role="dialog">
    <div id="emailform" class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title"><span class="glyphicon glyphicon-envelope"></span>Contact User</h4>
        </div>
        <div class="modal-body ">
          <div class="form-group row">
            <label class="control-label col-sm-2" for="subject">Email:</label>
            <div class="col-sm-10">
              <input type="email" ng-model="email" class="form-control" id="email" placeholder="Enter Subject" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="username">UserName:</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" ng-model="username" id="username" name="username" placeholder="Enter UserName" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="subject">Subject:</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" required ng-model="subject" id="subject" placeholder="Enter Subject" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="message">Message:</label>
            <div class="col-sm-10">
              <textarea rows="5" class="form-control" required ng-model="message" id="message" placeholder="Message Goes Here"></textarea>
            </div>
          </div>
          <div class="form-group row">
            <div class="col-sm-offset-2 col-sm-6">
              <button type="submit" ng-click="Contact()" class="btn btn-primary">Submit</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  </div>
  </body>

Javascript

$('.openDilog').on('show.bs.modal', function (e) {
    $(e.currentTarget).find('input[type="email"]').val('email@gmail.com');
    $(e.currentTarget).find('input[name="username"]').val('username');
});
var app = angular.module('my-app', []);
    app.controller('Ctrl', function($scope){
         $scope.Contact = function() {
      console.log($scope.email);
      console.log($scope.subject);
      console.log($scope.message);
      console.log($scope.username);
    }
    });

这是我为问题制作的小提琴

Fiddle

工作程序

您可以通过从控制器外部访问scope来完成此操作。

HTML:只需在HTML中添加一个id属性。例如->id='outer'

<body ng-app="my-app" ng-controller="Ctrl" id='outer'>

JavaScript:

$('.openDilog').on('show.bs.modal', function (e) {
        var scope = angular.element($("#outer")).scope();
    scope.$apply(function(){
        scope.email = 'email@gmail.com';
        scope.username = 'username';
    });
});

希望能解决你的问题。

您能初始化角度范围内的值吗?

var app = angular.module('my-app', []);
    app.controller('Ctrl', function($scope){
$scope.listUser = [
{email: "test1@test.com", username:"test1"},
{email: "test2@test.com", username:"test2"},
{email: "test3@test.com", username:"test3"},
{email: "test4@test.com", username:"test4"}
];
         $scope.Contact = function() {
      console.log($scope.email);
      console.log($scope.subject);
      console.log($scope.message);
      console.log($scope.username);
    }
    $scope.openPopin = function(username, email) {
      $scope.email = email;
      $scope.username = username;
    }
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.1/angular.min.js"></script>
<script>
</script>
<body ng-app="my-app" ng-controller="Ctrl">
<div class="container">
  <h3>Modal Example</h3>
  <!-- Button to trigger modal -->
  <div>
    <a href="#contactUser" ng-repeat="user in listUser" role="button" class="btn" data-toggle="modal" ng-click="openPopin(user.username, user.email)">Launch Modal</a>
  </div>
  <!-- Modal -->
  <div id="contactUser" class="modal fade openDilog" role="dialog">
    <div id="emailform" class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title"><span class="glyphicon glyphicon-envelope"></span>Contact User</h4>
        </div>
        <div class="modal-body ">
          <div class="form-group row">
            <label class="control-label col-sm-2" for="subject">Email:</label>
            <div class="col-sm-10">
              <input type="email" ng-model="email" class="form-control" id="email" placeholder="Enter Subject" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="username">UserName:</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" ng-model="username" id="username" name="username" placeholder="Enter UserName" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="subject">Subject:</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" required ng-model="subject" id="subject" placeholder="Enter Subject" />
            </div>
          </div>
          <div class="form-group row">
            <label class="control-label col-sm-2" for="message">Message:</label>
            <div class="col-sm-10">
              <textarea rows="5" class="form-control" required ng-model="message" id="message" placeholder="Message Goes Here"></textarea>
            </div>
          </div>
          <div class="form-group row">
            <div class="col-sm-offset-2 col-sm-6">
              <button type="submit" ng-click="Contact()" class="btn btn-primary">Submit</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  </div>
  </body>

这是我的小提琴ng重复

您可以使用ui.bootstrap模块来完成您试图为做的所有艰苦工作