2017-02-01 15 views
0

私は、HTMLで書かれたWebサイト用のメニューを持っていて、各ページにすべてを含めるのではなく(各ページを編集して何かを変更する必要があります)私はAngular(<div ng-include="menu.html"></div>)を使用してHTMLを含めています。角を使ってHTMLにJavascriptを実行しようとしています

ナビゲーションメニューをアニメーション化するために、付属のHTMLで実行する必要があるJavascript(外部.jsファイル)があります。私が実際にページにHTMLを含めるとうまくいきます。 HTMLを(角度のng-includeを通して)外部に作るのは、そうでないときだけです。

これは正しくターゲティングされていない問題かもしれないと思いますか?私は本当に自分自身を解決するために十分なjavascriptを知らない。

また、純粋なCSSを使用しているので、ほとんどのクラスが含まれているHTMLに含まれています。

HTMLページ:

<body ng-app=""> 
    <div ng-include="header.html"></div> 
    *rest of the page* 
</body> 

含む含むHTML:

//Header for the page 
<div id="topbar" class="pure-g"> 
    <div class="pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5"> </div> 
    <div class="pure-u-22-24 pure-u-sm-20-24 pure-u-md-16-24 pure-u-lg-3-5"> 
     <h1>Title</h1> 
    </div> 
    <div class="pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5"> </div> 
</div> 

//Navigation menu 
<div id="menu" class="custom-wrapper pure-g"> 

    //column 1 
    <div class="pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5"> </div> 

    //column 2 
    <div class="pure-u-22-24 pure-u-sm-20-24 pure-u-md-16-24 pure-u-lg-3-5 "> 
     //makes another row 
     <div class="pure-g"> 

      //column 1 
      <div class="pure-u-1 pure-u-md-1-3" style="height: 2.1em"> 
       <div class="pure-menu"> <a href="#" class="pure-menu-heading custom-brand" id="navTitle">Navigation</a> <a href="#" class="custom-toggle" id="toggle"><s class="bar"></s><s class="bar"></s></a> </div> 
      </div> 

      //column 2 
      <div class="pure-u-1 pure-u-md-1-3"> 
       <div class="pure-menu pure-menu-horizontal custom-can-transform"> 
        <ul class="pure-menu-list"> 
         <li class="pure-menu-item"><a href="#" class="pure-menu-link">Home</a></li> 
         <li class="pure-menu-item"><a href="#" class="pure-menu-link">About</a></li> 
         <li class="pure-menu-item"><a href="#" class="pure-menu-link">Contact</a></li> 
        </ul> 
       </div> 
      </div> 

      //column 3 
      <div class="pure-u-1 pure-u-md-1-3"> 
       <div class="pure-menu pure-menu-horizontal custom-menu-3 custom-can-transform"> 
        <ul class="pure-menu-list"> 
         <li class="pure-menu-item"><a href="#" class="pure-menu-link">Yahoo</a></li> 
         <li class="pure-menu-item"><a href="#" class="pure-menu-link">W3C</a></li> 
        </ul> 
       </div> 
      </div> 
     </div> 
    </div> 

    //column 3 
    <div class="pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5"> </div> 
</div> 

Javascriptを:

function menuScript() { 
(function (window, document) { 
    var menu = document.getElementById('menu') 
     , WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize'; 

    function toggleHorizontal() { 
    [].forEach.call(document.getElementById('menu').querySelectorAll('.custom-can-transform'), function (el) { 
      el.classList.toggle('pure-menu-horizontal'); 
     }); 
    }; 

    function toggleMenu() { 
     // set timeout so that the panel has a chance to roll up 
     // before the menu switches states 
     if (menu.classList.contains('open')) { 
      setTimeout(toggleHorizontal, 500); 
     } 
     else { 
      toggleHorizontal(); 
     } 
     menu.classList.toggle('open'); 
     document.getElementById('toggle').classList.toggle('x'); 
    }; 

    function closeMenu() { 
     if (menu.classList.contains('open')) { 
      toggleMenu(); 
     } 
    }; 
    document.getElementById('toggle').addEventListener('click', function (e) { 
      toggleMenu(); 
      e.preventDefault(); 
    }); 
    window.addEventListener(WINDOW_CHANGE_EVENT, closeMenu); 
})(this, this.document); 
}; 
+0

掲載の答えの一つにコメントし@DrMintsものと同じですあなたのjavascriptの機能をhtmlに変換します。 –

+0

@AmyBlankenshipどのように私はこれについてどうやって行くだろうか?私の知識が不足して申し訳ありません、以前はJavascriptについて深く掘り下げていませんでした。あなたがちょうどちょっとしたチュートリアルに私を送ることさえできるのであれば、それも素晴らしいでしょう! – zaviiox

+0

@zaviioxこれを見てくださいhttp://stackoverflow.com/questions/12197880/angularjs-how-to-make-angular-load-script-inside-ng-include –

答えて

0

だから、あなたはそれが非常に複雑化せずに作業するためのディレクティブを使用する必要があり、ここにあります方法の例:

angular.module('myApp').directive('menu', menu); 
     function menu() { 
      return { 
       restrict: 'EA', 
       template: "<div id=\"topbar\" class=\"pure-g\">\n" + 
         " <div class=\"pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5\"> </div>\n" + 
         " <div class=\"pure-u-22-24 pure-u-sm-20-24 pure-u-md-16-24 pure-u-lg-3-5\">\n" + 
         "  <h1>Title</h1>\n" + 
         " </div>\n" + 
         " <div class=\"pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5\"> </div>\n" + 
         "</div>\n" + 
         "\n" + 
         "<div id=\"menu\" class=\"custom-wrapper pure-g\">\n" + 
         "\n" + 
         " <div class=\"pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5\"> </div>\n" + 
         "\n" + 
         " <div class=\"pure-u-22-24 pure-u-sm-20-24 pure-u-md-16-24 pure-u-lg-3-5 \">\n" + 
         "  <div class=\"pure-g\">\n" + 
         "\n" + 
         "   <div class=\"pure-u-1 pure-u-md-1-3\" style=\"height: 2.1em\">\n" + 
         "    <div class=\"pure-menu\"> <a href=\"#\" class=\"pure-menu-heading custom-brand\" id=\"navTitle\">Navigation</a> <a href=\"#\" class=\"custom-toggle\" id=\"toggle\"><s class=\"bar\"></s><s class=\"bar\"></s></a> </div>\n" + 
         "   </div>\n" + 
         "\n" + 
         "   <div class=\"pure-u-1 pure-u-md-1-3\">\n" + 
         "    <div class=\"pure-menu pure-menu-horizontal custom-can-transform\">\n" + 
         "     <ul class=\"pure-menu-list\">\n" + 
         "      <li class=\"pure-menu-item\"><a href=\"#\" class=\"pure-menu-link\">Home</a></li>\n" + 
         "      <li class=\"pure-menu-item\"><a href=\"#\" class=\"pure-menu-link\">About</a></li>\n" + 
         "      <li class=\"pure-menu-item\"><a href=\"#\" class=\"pure-menu-link\">Contact</a></li>\n" + 
         "     </ul>\n" + 
         "    </div>\n" + 
         "   </div>\n" + 
         "\n" + 
         "   <div class=\"pure-u-1 pure-u-md-1-3\">\n" + 
         "    <div class=\"pure-menu pure-menu-horizontal custom-menu-3 custom-can-transform\">\n" + 
         "     <ul class=\"pure-menu-list\">\n" + 
         "      <li class=\"pure-menu-item\"><a href=\"#\" class=\"pure-menu-link\">Yahoo</a></li>\n" + 
         "      <li class=\"pure-menu-item\"><a href=\"#\" class=\"pure-menu-link\">W3C</a></li>\n" + 
         "     </ul>\n" + 
         "    </div>\n" + 
         "   </div>\n" + 
         "  </div>\n" + 
         " </div>\n" + 
         "\n" + 
         " <div class=\"pure-u-1-24 pure-u-sm-2-24 pure-u-md-4-24 pure-u-lg-1-5\"> </div>\n" + 
         "</div>", 
       scope: { 
       }, 
       controller: function() { 
        var menu = document.getElementById('menu') 
          , WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize'; 

        function toggleHorizontal() { 
         [].forEach.call(document.getElementById('menu').querySelectorAll('.custom-can-transform'), function (el) { 
          el.classList.toggle('pure-menu-horizontal'); 
         }); 
        } 


        function toggleMenu() { 
         // set timeout so that the panel has a chance to roll up 
         // before the menu switches states 
         if (menu.classList.contains('open')) { 
          setTimeout(toggleHorizontal, 500); 
         } else { 
          toggleHorizontal(); 
         } 
         menu.classList.toggle('open'); 
         document.getElementById('toggle').classList.toggle('x'); 
        } 


        function closeMenu() { 
         if (menu.classList.contains('open')) { 
          toggleMenu(); 
         } 
        } 

        document.getElementById('toggle').addEventListener('click', function (e) { 
         toggleMenu(); 
         e.preventDefault(); 
        }); 
        window.addEventListener(WINDOW_CHANGE_EVENT, closeMenu); 
       } 
      }; 

これは、HTMLページで<menu></menu>を使用するだけで使用できるクイック・ディレクティブです。しかし、これを改善するために、templateUrl: 'path_to_your_html'のテンプレートを変更し、コントローラをより角度のあるものに変更するなど、これを改善するためにできることはたくさんあります(はい、私はその言葉を作りました)。 AngularにはjQueryLiteビルドインがあり、$timeout wrapperを使って、ng-classでクラスをDinamicalyに変更することができます。

0

基本的に私の友人に全部の.zipファイルを送信した後、私たちはそれを動作させることができました。

JSは別のhtmlファイルで作業する必要があったため、AngularJSを使用してJSを外部ファイル用にng-controllerにしました。私たちは、この作業を取得することができましたし、それは今、すべての良いことだ:)

これは、あなたがその結婚ディレクティブを記述する必要があるように私には思える

関連する問題