Javascript AngularJS服务/工厂从$scope变量动态编译$HTML
试图将AngularJS项目中跨多个控制器使用的函数合并到我可以使用Javascript AngularJS服务/工厂从$scope变量动态编译$HTML,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,试图将AngularJS项目中跨多个控制器使用的函数合并到我可以使用$rootScope调用的服务/工厂。目标是更改以下功能: $scope.twitterRefresh = function(obj) { try { var old = document.getElementById('twitterContainer'); old.parentNode.removeChild(old); } catch (err)
$rootScope
调用的服务/工厂。目标是更改以下功能:
$scope.twitterRefresh = function(obj) {
try {
var old = document.getElementById('twitterContainer');
old.parentNode.removeChild(old);
}
catch (err) {};
var html = "<div id='twitterContainer'>"+$scope.game[0]['twitterEmbed']+"</div>";
var elem = $compile(html)($scope);
angular.element(document.getElementById('twitterEmbed')).append(elem);
};
其中,在控制器中调用以下函数
$scope.twitterRefresh = $rootScope.twitterRefresh($scope.game[0]['twitterEmbed']);
不要在每个控制器$scope上定义函数,只需将其保留在$rootScope上,并在其他地方需要时使用它,方法是将$rootScope注入控制器并使其可用
//something like this
app.run(function($rootScope, $compile) {
$rootScope.twitterRefresh= function(obj, scope){
$compile(obj)(scope);
}
});
试着这样做:
app.factory('twitterRefresh', ['$document', '$compile', '$rootScope',
function($document, $compile, $rootScope) {
return function (obj) {
try {
var old = document.getElementById('twitterContainer');
old.parentNode.removeChild(old);
}
catch (err) {};
var html = "<div id='twitterContainer'>"+obj+"</div>";
var scope = $rootScope.$new();
var elem = $compile(html)(scope);
angular.element(document.getElementById('twitterEmbed')).append(elem);
}
}
]);
app.factory('twitterRefresh'、['$document'、'$compile'、'$rootScope',
函数($document、$compile、$rootScope){
返回函数(obj){
试试{
var old=document.getElementById('twitterContainer');
old.parentNode.removeChild(old);
}
捕获(错误){};
var html=”“+obj+”;
var scope=$rootScope.$new();
var elem=$compile(html)(范围);
元素(document.getElementById('twitterEmbed')).append(elem);
}
}
]);
$scope.twitterfresh()=$rootScope.twitterfresh…
。你是想把括号()
放进去吗$scope.twitterRefresh=function(){$rootScope.twitterRefresh($scope.game[0]['twitterEmbed']);}
看起来更有用,我相信我的问题是如何将变量$scope.game[0]['twitterEmbed']
传递给服务/工厂或rootScope函数,$rootScope函数如何正确调用$compile服务要正确调用$compile,您需要将$scope实例传递给已定义的$rootScope函数。如果$rootScope函数位于app.js run函数中,请确保插入$compile服务,并从控制器传递$scope实例。这应该行得通。
app.factory('twitterRefresh', ['$document', '$compile', '$rootScope',
function($document, $compile, $rootScope) {
return function (obj) {
try {
var old = document.getElementById('twitterContainer');
old.parentNode.removeChild(old);
}
catch (err) {};
var html = "<div id='twitterContainer'>"+obj+"</div>";
var scope = $rootScope.$new();
var elem = $compile(html)(scope);
angular.element(document.getElementById('twitterEmbed')).append(elem);
}
}
]);