2017-07-25 175 views
-1

在這裏,我使用angularjs和bootstrap顯示數組中的選項卡。 我想要的是當我點擊特定的選項卡時,它應該只顯示該選項卡的內容。angularjs顯示/隱藏標籤

即(當我點擊動態2我想顯示的動態2含量和隱藏動態-1和動態3片的內容)的所有標籤的

現在我得到的內容點擊。

JS文件

var items=[ 
          { 
           Name:"tab1", 
           id:1, 
           content:"FirstTab", 
           title:"Dynamic-1", 
           templateUrl:"first.html" 

           }, 

           { 
           Name:"tab2", 
           id:2, 
           content:"SecondTab", 
           title:"Dynamic-2", 
           templateUrl:"second.html" 


           }, 

           { 
           Name:"tab3", 
           id:3, 
           content:"ThirdTab", 
           title:"Dynamic-3", 
           templateUrl:"third.html" 
           } 
         ]; 

}]); 

HTML文件

<ul class="nav nav-tabs"> 
      <li ng-repeat="l in list" > 

       <a href="#firsttab" ng-click="tab = 1" data-toggle="tab" > 
      {{l.title}} </a> 

       <div class="tab-content" > 
        <div id="firsttab" ng-click="tab = 1" ng- 
               show="tab===1"> 
        Id: {{l.id}} <br> 
        Name: {{l.Name}} <br> 
        Content: {{l.content}} <br> 
        TemplateFile: <div ng-include="l.templateUrl"></div> 
       </div> 

</ul> 
     </div> 
    </li> 

+0

嗨,你可以傳遞參數,當你$廣播:$ rootScope。$廣播('掃描儀啓動',{任何:{}});然後接收它們:$ scope。$ on('scanner-started',function(event,args){ var anyThing = args.any; //做你想做的事 }); – corsaro

+0

文檔:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$on – corsaro

回答

0

如果您在父控制器類似這樣的廣播

$scope.$broadcast('itmObj',{ itemsArray: items}); 

然後你可以使用的副漁獲物的孩子像控制器和 奧尼爾你有items陣列中args.itemsArray

$scope.$on('itmObj', function (event, args) { 
var x = args.itemsArray; // args.itemsArray is your items from parentcontroller 
}); 
+0

我做到了,但仍然無法顯示數組。打開功能 – sachin

+0

? –

+0

nope..when我console.log(物品)在廣播下顯示,但當我嘗試做同樣的$下它不顯示任何東西。 – sachin

1

model.js(只要改變這個文件的代碼我在下面寫的代碼。它會給你想要的結果) 我們必須提供延遲廣播,使其工作。

define(['jquery','ocLazyLoad','cssinjector'], function() { 
    var app=angular.module('App', ['angular.css.injector','oc.lazyLoad']); 
    app.controller('mycontroller', ['$scope','$ocLazyLoad','cssInjector','$rootScope','$timeout', 
    function($scope,$ocLazyLoad,cssInjector,$rootScope,$timeout) { 

      alert("modal-loaded"); 

      $ocLazyLoad.load("http://localhost:8080/tabs/js/modal1.js") 
      .then(function(){ 
       alert("modal1 loaded"); 
       $scope.view="http://localhost:8080/tabs/view.html"; 
       cssInjector.add("http://localhost:8080/tabs/style.css"); 
     }); 


      // ARRAY 

       var items=[ 
           { 
            Name:"tab1", 
            id:1 
            }, 

            { 
            Name:"tab2", 
            id:2 
            }, 

            { 
            Name:"tab3", 
            id:3 
            } 
          ]; 

        $timeout(function(){ 
         $rootScope.$broadcast('itmObj', items); 
       },0); 

    }]); 




     angular.element(function() { 
     angular.bootstrap(document, ['App']); 
     });   
    }); 
+0

獲取錯誤信息:$ timeout不是一個函數 – sachin

+0

即使它有效,也可能出現問題。它不好引入不需要的超時。廣播不起作用,因爲模式控制器未被初始化,並且在調用廣播時不在上下文中。確實,我們必須在view/modalcontroler加載後調用廣播。但不使用超時。 –

+0

@sachin爲那注入$ timeout –

0

試圖在惰性加載的modalController和模態視圖看起來像這樣 Modal.js

define(['jquery','ocLazyLoad','cssinjector'], function() { 
    var app=angular.module('App', ['angular.css.injector','oc.lazyLoad']); 
    app.controller('mycontroller', ['$scope','$ocLazyLoad','cssInjector', 
    function($scope,$ocLazyLoad,cssInjector) { 

      alert("modal-loaded"); 
      // ARRAY 
      var items=[{ 
          Name:"tab1", 
          id:1 
         },{ 
          Name:"tab2", 
          id:2 
         },{ 
          Name:"tab3", 
          id:3 
         }]; 

      var lazyLoadModal1 = function(){ 
       var deferred = $q.defer(); 
       $ocLazyLoad.load("http://localhost:8080/tabs/js/modal1.js") 
       .then(function(){ 
        alert("modal1 loaded"); 
        $scope.view="http://localhost:8080/tabs/view.html"; 
        cssInjector.add("http://localhost:8080/tabs/style.css"); 

        deferred.resolve(); 
        },function(){ 
        deferred.reject(); 
        }); 
       return deferred.promise; 
      }; 
      var init = (function(){ 
       lazyLoadModal1().then(function(){ 
        $scope.$broadcast('itmObj', {item:items}); 
       }); 
      })(); 
    }]); 

View.html

<div ng-controller="modalcontroller"> 
    <div ng-repeat="vm in itemsArray"> 
    <p>{{vm.Name}}</p> 
    <p>{{vm.id}}</p> 
    </div> 
</div> 

Modal1添加一個承諾.js

angular.module('App', ['angular.css.injector','oc.lazyLoad']) 
.controller("modalcontroller", ['$scope','$ocLazyLoad','cssInjector', 
function($scope,$ocLazyLoad,cssInjector){ 

     alert("In modal Controller"); 

     $scope.$on("broadcast-started", function (event, data){ 
       $scope.itemsArray=data.item; 
       console.log($scope.itemsArray); 
    }); 

}]); 
+0

你有錯誤嗎? –

+0

沒有錯誤和空的控制檯 – sachin

+0

使用$延遲,是你的cssInjector.add,一個庫 –