2014-11-20 8 views
0

У меня есть вопрос, который касается условных частично-подобных просмотров в AngularJS. Пример ниже не очень оптимален. Он также возвращает ошибку, относящуюся к строке $compile(element.contents())(scope), в которой говорится, что я не могу использовать scope в качестве функции, но в противном случае она не будет отображать все правильно. Случай использования заключается в следующем:условных просмотров в AngularJS

  1. Я запрашивающей маршрут через $http, который возвращает массив объектов

  2. Я ng-repeat что вернулся массив объектов

  3. Для каждого объекта (давайте назовите его obj) значение obj.view_edit.

  4. Если obj.type равен plugin, <plugin></plugin> директива вставляется

Это будет выглядеть так:

<plugin view="content.view_edit"></plugin> 

Моя Директива выглядит следующим образом:

directive('plugin', function($compile) { 
    var linker = function(scope, element, attrs) { 
     console.log(scope.view); 
     element.html(scope.view).show(); 
     $compile(element.contents())(scope); 
    } 
    return { 
     restrict:"E", 
     link: linker, 
     scope: { 
      view:'=' 
     } 
    } 
}) 

У вас есть любые лучшие решения?

ответ

1

Вам не нужно выполнять ручную манипуляцию с DOM в вашей функции ссылок, чтобы скрыть/показать или $compile s, пока вы не справитесь с большей сложностью. Просто используйте директиву ng-if.

<div ng-repeat="obj in objects"> 
    <div ng-if="isPlugin(obj)"> 
     <plugin view="obj.view_edit"></plugin> 
    </div> 
    <div ng-if="!isPlugin(obj)"> 
     This is not a plugin. 
    </div> 
</div> 

Тогда вы бы функцию в объеме, что ng-if ссылки. Это позволяет очищать HTML и очищать как можно больше логики.

scope.isPlugin = function (obj) { 
    return obj.type === 'plugin'; 
} 
+0

Спасибо! Я справился с этой проблемой, используя ваш подход с помощью [ngSwitch] (https://docs.angularjs.org/api/ng/directive/ngSwitch) 'ng-switch =" content.type "и' ng-switch-when = «плагин» для каждого типа. – barfoos