Angular.Js Bind动态加载HTML

时间:2015-05-29 23:10:17

标签: jquery angularjs

我正在使用HTML页面的内容更新DIV,该页面具有角度控制器。当使用HTML填充DIV时,它不会与Controller绑定。

我的index.html

<div id="mainDiv"> </div>

我使用jQuery加载的home.html的内容

<div ng-controller="BlogsController">
    {{Hello}}
</div>

这就是我在index.html上调用的内容

$().ready(function () {
    $("#mainDiv").load("pages/home.html");
})

Angular不会更新{{Hello}},它似乎没有通过jQuery绑定到加载的html。

2 个答案:

答案 0 :(得分:2)

Angular并不知道你在jQuery中的变化。您需要通过angular加载html并调用编译服务:

$compile(HTML)($scope);

或者发出事件并告诉angular编译它。我刚刚回答了一个与此类似的问题,关于如何通过jquery进行角度感知:AngularJS legacy integration and content that contains asynchronously changing id doesn't trigger watcher

要清理,您需要将ngSanitize模块添加到项目中。但我相信你可以使用$ sce服务告诉棱角分明,如果你相信它就不要打扰消毒

<div id="mainDiv" compile-directive></div>

$().ready(function () {
    $.get('pages/home.html', function(data){
        $(document).trigger('customEvent', [data]);  
    });
});

angular.module('test').run(['$rootScope', function ($rootScope) {
    //capture jQuery events and re-broadcast them as angular events
    //events to capture
    var events = [
        'customEvent'
    ];

    //To Use: $scope.$on('eventName', function(ngEvent, jqEvent, data)
    $(document).on(events.join(' '), function(e) {
        $rootScope.$broadcast.apply($rootScope, [e.type].concat(Array.prototype.slice.call(arguments, 0)));   
    });
});

angular.module('test').directive('compileDirective', function($compile, $sce){
    return{
        restrict: 'AE',
        link: function(scope, element, attrs){
            scope.$on('customEvent', function(ngEvent, jqEvent, data){
                scope.$apply(function(){
                    angular.element.append($compile($sce.trustAsHtml(data))(scope));
                });
            };
         }
     };
 });

答案 1 :(得分:0)

  var htmlcontent = $('#loadhtml ');
    htmlcontent.load('/Pages/Common/index.html')
    $compile(htmlcontent.contents())($scope);