как два раза вызывать одну и ту же директиву при изменении HTML принадлежит директиве

0

Я работаю над проектом с использованием материала angularJS. Я <sdiv-panel></sdiv-panel> директиву (<sdiv-panel></sdiv-panel>) в DOM, но проблема в том, что я модифицирую некоторый элемент в HTML директивы, второй вызов той же директивы возвращает новую HTML.

Как я могу это решить?

Я ищу решения, которые заставляют меня вызывать директиву со всеми изменениями на странице HTML, в соответствии с директивой, которую я вызываю.

Мой код:

<md-content style="height:-webkit-calc(100% - 64px)"  flex class="stop-scrolling"  md-theme="{{vm.contentTheme}}" md-theme-watch="true">       
    <div style="height:-webkit-calc(50%)" layout="column" ng-repeat="cardrow in vm.cards" ng-show="vm.multipleview">         
        <div flex layout="row" layout-fill>           
            <md-card class="card" ng-repeat="card in cardrow"  >             
                <md-toolbar style="min-height:35px; height:40px" class="md-hue-1" ng-dblclick="vm.openFromLeft()">               
                    <div class="md-toolbar-tools">                 
                        <h1 >{{card.view.name }}</h1>                 
                        <md-menu >                   
                            <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button" aria-label="More">                     
                                <i class="material-icons">more_vert</i>                   
                            </md-button>                   
                            <md-menu-content >                     
                                <md-menu-item ng-repeat="view in vm.views" >                       
                                    <md-button ng-click="card.view=view" class="md-hue-2" >{{view.name}}</md-button>                     
                                </md-menu-item>                   
                            </md-menu-content>                 
                        </md-menu>               
                    </div>             
                </md-toolbar>             
                <md-card-content flex class="cardcontent"  >               
                    <sdiv-panel card={{card.view.element}} view={{card.name}}_4 >               
                    </sdiv-panel>             
                </md-card-content>           
            </md-card>         
        </div>       
    </div>     
    <div ng-hide="vm.multipleview"  >       
        <md-content layout-fill>         
            <md-tabs md-dynamic-height md-border-bottom >           
                <div ng-repeat="cardrow in vm.cards">           
                    <md-tab  ng-repeat="card in cardrow " label="{{ card.view.name }}">             
                        <!--<md-tab  ng-repeat="card in vm.tabtable " label="{{ card.name }}">-->             
                        <md-content layout-fill="" flex=""  style="margin-top: 10px" >               
                            <div style="margin-bottom: 10px" >                 
                                <sdiv-panel card={{card.view.element}}  view={{card.name}}_1 ></sdiv-panel>               
                            </div>             
                        </md-content>           
                    </md-tab>           
                </div>         
            </md-tabs>       
        </md-content>     
    </div>   
</md-content>
  • 1
    Можете ли вы представить какую-либо реализацию вашей директивы и пример использования, пожалуйста?
  • 0
    Вы должны использовать изолировать область видимости для директивы, а для html использовать transclude. Я надеюсь, что это помогает
Показать ещё 2 комментария
Теги:
angularjs-directive

2 ответа

0

Вот моя директива:

    (function() {'use strict';
    angular.module('sdivMaterial.panel')
    .directive(
    'sdivPanel', function($compile) {
    return {
    restrict: "E",
    replace: false,
    scope : {
      card: "@",
      view:"@"
    },
     template: "",
     link: function postLink($scope, $element, $attr) {
     $attr.$observe('card', function(data) {
      console.log("Updated data ", $scope.card, " : ", $scope.view);
      var html = $scope.card;
      $element.html(html);
      $compile($element.contents())($scope);
     }, true);
   }
  }
 })
})();
0

Вот моя директива: (function() {'use strict';

angular.module('sdivMaterial.panel').directive('sdivPanel', function ($ compile) {return {restrict: "E", replace: false, scope: {card: "@", view: "@"}, шаблон: "", ссылка: функция postLink ($ scope, $ element, $ attr) {$ attr. $ наблюдать ('card', function (data) {console.log("Обновленные данные", $ scope.card, ":", $ scope.view); var html = $ scope.card; $ element.html(html); $ compile ($ element.contents()) ($ scope);}, true);}}}) })();

пример моего main.html: {{card.view.name}} more_vert {{view.name}} ->

Ещё вопросы

Сообщество Overcoder
Наверх
Меню