angularjs – 注入动态html似乎没有编译
我正在尝试使用angularJS解决一个主要问题,即使用包含ng-controller的动态添加的html.
让我们说我想在DOM中添加一个div作为ng-controller,它将绑定的数据脱离显示.我可以成功实现如下: <!DOCTYPE html> <html ng-app="myApp"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script> <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> <script> var demoData = { 'test1': 'one','test2': 'two' }; var myApp = angular.module('myApp',[]); myApp.controller('TestCtrl',function ($scope) { $scope.demo = demoData; }); </script> </head> <body> <div ng-controller="TestCtrl"> {{demo}} </div> </body> </html> 按预期输出以下内容:
但是,现在可以说div实际上必须动态加载,也许当用户按下按钮时.在这种情况下,我将使用以下内容替换上例中的标记: <body> <button onclick="addDiv();">Click to add Div!</button> <script> function addDiv() { var newDiv = $('<div ng-controller="TestCtrl">{{demo}}</div>'); $(document.body).append(newDiv); } </script> </body> 单击按钮时输出以下内容:
到目前为止,这是有道理的; angular已经在DOM中完成了它的工作,完成了它.它没有被告知有关新内容的添加.
所以……考虑到这一点,我们在我们的示例中更新addDiv()函数,如下所示: function addDiv() { var $newDiv = $('<div ng-controller="TestCtrl">{{demo}}</div>'); $(document.body).append($newDiv); angular.element(document).injector().invoke(function ($compile) { var scope = angular.element($newDiv).scope(); $compile($newDiv)(scope); }); } 现在,当我们运行它时,我们应该是金色的吗?
你能指出我做错了什么,因为谷歌搜索和阅读手册没有结束,因为一切似乎都表明我的代码是正确的! 解决方法
从Angular ng-click调用的函数调用时,您的代码将按原样运行.
由于您似乎真的想避免使用Angular,因此需要传统的onclick事件处理程序,因此需要将更改包装到$scope的调用中.$apply():http://plnkr.co/edit/EeuXf7fEJsbBmMRRMi5n?p=preview angular.element(document).injector().invoke(function ($compile,$rootScope) { $rootScope.$apply(function() { var scope = angular.element($newDiv).scope(); $compile($newDiv)(scope); }); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angularjs – 使用Angular-ui Bootstrap设置typeahead的选项
- angularjs – Angular nameless ng-app
- 实现webservice客户端后在tomcat下运行正常,部署到weblogi
- 如何在容器中解析docker主机名(/ etc / hosts)
- 浅谈WebService
- twitter-bootstrap – 使用Bootstrap 3 Navbar的最佳方式,没
- shell脚本: 查看linux用户组,以及每个组中有哪些用户
- 传递给孩子的Bash参数($@或$*)
- scala – Shapeless’Lazy和默认参数导致隐式解析失败
- angularjs – ng-bootstrap ngbDropdown无法在角度4中工作