angularjs显示/隐藏标签

问题描述:

在这里,我使用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

如果您在父控制器类似这样的广播

$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

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 –

试图在惰性加载的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,一个库 –