2016-06-27 3 views
1

У меня есть это (частичное) представление с его контроллером: моя цель состоит в том, чтобы программно вставить/удалить два подпрограммы (ADR и MDR).Ng-if not working

Я изучил директиву ng-if, и я попытался применить его в своем тесте, но, похоже, не работает, потому что представления не отображаются, когда я нажимаю на ссылку.

Любые помощь?

drfmControllers.controller('functionalitiesHandler', ['$scope', 
 

 
    function ($scope) { 
 

 

 
     $scope.setMDRFunction = function() { 
 
      clearAll(); 
 
      $scope.MDR = true; 
 
      console.log("MDR "+$scope.MDR); 
 
     } 
 

 
     $scope.setADRFunction = function() { 
 
      clearAll(); 
 
      $scope.ADR = true; 
 
      console.log("ADR "+ $scope.ADR); 
 
     } 
 

 
     function clearAll(){ 
 
      $scope.MDR = false; 
 
      $scope.ADR = false; 
 
     } 
 
    } 
 
]);
<div class="container-fluid"> 
 
    <div class="row content"> 
 
     <div class="col-sm-3 sidenav hidden-xs"> 
 
      <h2>DRFM Cockpit</h2> 
 
      <ul class="nav nav-pills nav-stacked"> 
 
       <li><a ng-controller="functionalitiesHandler" ng-click="setMDRFunction()" >MDR</a></li> 
 
       <li><a ng-controller="functionalitiesHandler" ng-click="setADRFunction()" >ADR</a></li> 
 

 
      </ul> 
 
      <br> 
 
     </div> 
 
     <br> 
 

 
     <div class="col-sm-9">   
 
      <div ng-if="MDR"> 
 
       <h1>Test 1</h1> 
 
       <p>Test 1</p> 
 
       <hr> 
 
      </div> 
 
      <div ng-if="ADR"> 
 
       <h1>Test 2</h1> 
 
       <p>Test 2</p> 
 
       <hr> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

+0

Было бы полезно, если бы ваш фрагмент продемонстрировал проблему, с которой вы сталкиваетесь, а не просто синтаксическую ошибку, потому что вы не включили достаточно код. – Jamiec

+0

@Jamiec это большое приложение, поэтому его трудно воспроизвести в Plunker или аналогичном: поэтому я ставлю здесь только самые важные фрагменты кода. –

+0

Нет, его нет - и вам не нужно копировать все ваше приложение. Что вам нужно сделать, это включить угловые и определить 'drfmControllers' – Jamiec

ответ

3

Ваш атрибут ng-controller должен быть объявлен на общего предка всех элементов, которые полагаются на его $ объеме. Вы его дважды объявили, на двух элементах <li> (которые, кстати, создадут два разных экземпляра контроллера). Попробуйте переместить его на элемент <div class="row content">.

+0

Спасибо, что ты прав. Извините, что я новичок. –

1

Вы не устанавливаете контроллер для всего html, чтобы он не получал MDR и ADRng-if значения.

Вы можете обработать его, добавив ng-controller во внешний div и удалив из вашего списка.

<div class="container-fluid" ng-controller="functionalitiesHandler"> 

Работа jsFiddle для демонстрации.

+0

Спасибо, что ты прав. Извините, что я новичок. –

+0

@PietroFragnito Приятно, что вы достигли прогресса! – adolfosrs

0

ng-controller = "functionalitiesHandler" должен быть объявлен в родительском div всех div, где вы ссылаетесь на код с этого контроллера. например в этом div:
div class = "container-fluid" ng-controller = "functionsitiesHandler"