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;
}
参考文章