Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 如何在没有指令的情况下添加dom_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 如何在没有指令的情况下添加dom

Javascript 如何在没有指令的情况下添加dom,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,如何在不使用指令的情况下使用Angularjs添加dom。相信我的话,在这种情况下我不能使用指令。现在我正在使用jQuery添加dom,但是我找不到一种方法来重新编译它,以便Angularjs知道如何处理它。我更喜欢使用Angularjs添加dom,因为我认为这样编译会更容易,但我真的不知道。添加dom后,如何在没有控制器的情况下编译它。我只有一个注册的应用程序模块 我试图做的一个例子是在这个JSFIDLE中: 您永远不应该在指令之外进行dom操作,也永远不需要这样做。然而,既然你已经说服了自己

如何在不使用指令的情况下使用Angularjs添加dom。相信我的话,在这种情况下我不能使用指令。现在我正在使用jQuery添加dom,但是我找不到一种方法来重新编译它,以便Angularjs知道如何处理它。我更喜欢使用Angularjs添加dom,因为我认为这样编译会更容易,但我真的不知道。添加dom后,如何在没有控制器的情况下编译它。我只有一个注册的应用程序模块

我试图做的一个例子是在这个JSFIDLE中:


您永远不应该在指令之外进行dom操作,也永远不需要这样做。然而,既然你已经说服了自己:

//inject the $compile service into the controller
app.controller('myCtrl', function($scope, $compile) {
  //create the markup
  var $x = $('<p>{{foo}}</p>');
  $('body').append($x);
  //$compile it with the scope
  $compile($x)($scope);
});
根据您的更新:

var app = angular.module('app',[]);

var testCtrl = function($scope) {
    $scope.foo = 'See, I loaded!';
};

app.controller('testCtrl',['$scope',testCtrl]);

app.directive('myDirective', function() {
    return {
      template: '<div ng-controller="testCtrl">{{foo}}</div>'
    };
});

这可以通过angularjs来完成。在ng的帮助下,包含和延迟加载

例如,我有一个控制器ModulesCtrl,它加载到其他控制器的模块中

模块化

app.controller('ModulesCtrl',['$rootScope','$scope',function ModulesCtrl($rootScope,$scope) {
   $scope.modules = [];
   $scope.data = {
      modules:[]
   };

   //Called after lazy loading the controllers js file 
   //otherwise you will get undefined function errors etc
   function addModule(){
      $scope.data.modules.push({
         template:'/templates/modules/test.template',
         settings:{name:"Test"}
      });
   }
}]);
ModulesCtrl元件

<div ng-controller="ModulesCtrl" ng-position="top">
   <div ng-repeat="module in data.modules" ng-include src="module.template"></div>
</div>
延迟加载的控制器必须如下所示:

angular.module('app').controllerProvider.register('SomeLazyController', ['$scope'],function($scope)
{
    $scope.key = '...';
});

添加dom意味着什么?添加我假设的元素?你能提供一个代码示例吗?我想我们需要更多的上下文。我认为你问的答案是错误的。请解释为什么你不能使用指令,我们不能只听取别人的意见,否则我们在试图解决问题时可能会遗漏一些东西。正如Rob所说的,显示一些代码,以便我们确切地知道您想要什么。所以您想要的是动态添加一个控制器元素?这仍然使用jQuery,这很好,因为他已经有了它。但是如果没有,可以用var$x=angular.element'{{foo}}

'替换标记行@当然是JonathanRowny,但他说他正在用jQuery进行dom操作。我强调这是完全错误的。我回答这个问题是因为我可以。问题是我正在构建一个插件,假设用户不知道angularjs,也不想知道angularjs来使用它。我没有任何控制器,也不想让用户自己添加指令。控制器和指令通过jQueryDOM添加,然后有望重新编译。我正试图找出如何重新编译它。为什么用户必须添加它?为什么不把它包含在插件的源代码中?@Mr.Student我仍然不知道你在说什么,但我用一个指令重新制作了你的演示,没有jQuery。这正是我想要的。谢谢
<div ng-controller="TestCtrl">
  this is a test template
</div>
(function()
{
    var app = angular.module('app', []);

    app.config(function($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide)
    {
        app.controllerProvider = $controllerProvider;
        app.compileProvider    = $compileProvider;
        app.routeProvider      = $routeProvider;
        app.filterProvider     = $filterProvider;
        app.provide            = $provide;

        // Register routes with the $routeProvider
    });
})();
angular.module('app').controllerProvider.register('SomeLazyController', ['$scope'],function($scope)
{
    $scope.key = '...';
});