【问题标题】:AngularJS directive are not working when appended with jQuery附加 jQuery 时,AngularJS 指令不起作用
【发布时间】:2018-06-14 02:23:02
【问题描述】:

我在下面附加了从服务器端返回的 html 表单以响应 ajax 调用

<div ng-app="submitExample"  >
    <form action="shan" ng-submit="submit()" ng-controller="ExampleController" id="account_info_modal">

    Enter text and hit enter:
        <input type="text" ng-model="text" name="text" />
        <input type="submit" id="submit" value="Submit" />

  </form>


</div>

当使用 ajax 附加表单时,这里 angular js 指令不起作用,但是当表单在页面上时,angular js 代码可以正常工作,下面给出了我的 angular js 脚本

(function() {
    angular.module('submitExample', [])
        .controller('ExampleController', ['$scope', function($scope) {
            $scope.submit = function() {
                alert("hello submit");
            };
        }]);
})();

给出下面我用来附加html表单的函数

function show_account_info_modal(param)
    {

        var id=$(".jstree-clicked").parent().attr('id');
        var name=$(param).attr('name');

        $.ajax({
            type: 'get',
                url: '<?= admin_url('Chart_of_accounts/get_account_info_modal'); ?>',
            data: { account_id:id,name:name },
            success: function (data)
            {
                $("#account_info_modal").html(data)
            }
        });


    }

【问题讨论】:

  • 显示appending given below html 的代码
  • 我确实更新了我的问题,请检查
  • 甚至不要使用 jQuery。甚至不包括它。它会让你退缩。当你遇到一个你认为你已经知道如何在 jQuery 中解决的问题时,在你使用 $ 之前,试着考虑如何在 AngularJS 的范围内解决它。不知道就问吧! 20 次中有 19 次,最好的方法不需要 jQuery,尝试用 jQuery 解决它会给你带来更多的工作。
  • 目前我已经实现了 jquery 的代码,我想用 angular js 扩展我的功能,不想再次编写预开发功能的代码

标签: javascript jquery html angularjs ajax


【解决方案1】:

追加元素时需要使用$compile服务。

将 HTML 字符串或 DOM 编译成模板并生成模板函数,然后可以使用该函数将作用域和模板链接在一起。

根据您的代码使用

$("#account_info_modal").html($compile(data)($scope))

这是一个例子

(function(angular) {
  'use strict';
  angular.module('myApp', [])
    .controller('Controller', ['$scope', '$compile',
      function($scope, $compile) {

        $scope.click = function() {
          console.log($scope.text)
        }

        //Append element dynamically
        var html = $compile('<input type="text" ng-model="text" name="text" /><button type="button" ng-click="click()">Click Me</button>')($scope);
        angular.element(document.querySelector('#x')).append(html);

      }
    ]);

})(window.angular);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
  <div ng-controller="Controller">
    <div id="x">
    </div>
  </div>
</div>

【讨论】:

  • 在控制器中使用$compile 服务是code smell - 一个更深层次问题的症状。在大多数情况下,AngularJS 框架有更好的方法,更容易理解、调试和维护。有关详细信息,请参阅“Thinking in AngularJS” if I have a jQuery background?
  • @satpal 请告诉我我们将如何在您的示例代码 ng-click="click()" 中定义在 ng-click 指令中调用的点击函数
猜你喜欢
  • 2015-06-24
  • 1970-01-01
  • 2018-09-07
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多