美文网首页
AngularJS 动态生成的元素正确的插入方式(不能触发脏检查

AngularJS 动态生成的元素正确的插入方式(不能触发脏检查

作者: 维仔_411d | 来源:发表于2018-09-07 10:46 被阅读0次

js代码中动态生成的元素置到页面中,直接append到页面中ng不起作用,调用不到该函数

var parentBox = $('#test');
parentBox.append("<button ng-click=\"clickSearchBtnTop()\" >test</button>");

依然直接append到页面元素中,换一种写法,可以调用到该函数,不能触发脏检查

var parentBox = $('#test');
parentBox.append("<button onclick=\"angular.element(this).scope().clickSearchBtnTop()\" >test</button>");

编译后再append,即可同页面中其他元素一样,正常通过页面ui操作、timeout、ajax请求等触发脏检查

var parentBox = $('#test');
var html = "<button ng-click=\"clickSearchBtnTop()\" >test</button>";
var chtml = $compile(html)($scope);
parentBox.append(chtml);

若页面动态生成的元素是引入的库生成的,则插入的元素不能由我们控制编译,目前我的解决方法是主动触发脏检查,主动触发的方式目前我使用的是如下两种【1】调用如下这个函数【2】$scope.$apply()。$scope.$digest()也可实现这个目的,但是不推荐直接调用[1]

globalService.nonAngularListenerCallback().then(function (data) {
});

global.service.js中:
nonAngularListenerCallback: function() {
    var deferred = $q.defer();
    var promise = deferred.promise;
    deferred.resolve({"code":0,"body":[]});
    return promise;
}

参考文章


  1. angularjs 中的$digest和$apply区别

相关文章

网友评论

      本文标题:AngularJS 动态生成的元素正确的插入方式(不能触发脏检查

      本文链接:https://www.haomeiwen.com/subject/gjiqgftx.html