Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务/工厂从$scope变量动态编译$HTML_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS服务/工厂从$scope变量动态编译$HTML

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)

试图将AngularJS项目中跨多个控制器使用的函数合并到我可以使用
$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);
    }
  }
]);