Angular Services应该操纵DOM吗?

时间:2015-09-18 17:39:01

标签: javascript angularjs dom angular-services

据我了解,使用服务操作DOM的做法很糟糕。应该为指令保留DOM操作。我想创建类似于模态的东西,其中调用服务来生成DOM元素。

E.I。

function MyController($sope, myModal) {

   // Submit a form
   $scope.submit = function() {
      if (formIsValid) {
         // do stuff
      } else {
         myModal.show({
            templateUrl: 'sometemplate.html',
            controller: 'MyModalController'
         }).then(function() {
            // do stuff
         });
      }
   }

}

尝试考虑不同的方法来实现这一点,似乎最简单的方法是让服务将DOM元素注入页面 -

function MyModalService($http, $compile, $controller, $rootScope) {

   this.show = function (options) {
      var $scope = $rootScope.$new(true);
      $controller(options.controller, {
         $scope: $scope
      });

      $http.get(options).success(function(html) {
         var ele = $compile(html)($scope);

         // Bad practice? Alternatives?
         angular.element('body').append(ele);
      });
   }

}

这可能看起来像小土豆,但我喜欢坚持一种模式,我喜欢打破模式或修改模式的理由。这是常见的还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

这听起来与角度引导程序的模态非常相似。

您可以在此处查看其实施情况:https://github.com/angular-ui/bootstrap/blob/master/src/modal/modal.js(参见第452行)