angular.js - Beberapa soalan mengenai sudut
过去多啦不再A梦
过去多啦不再A梦 2017-05-15 16:52:56
0
2
578

Terdapat dua masalah angularjs sedia ada

1.
Sebuah artikel dimuatkan melalui $http Artikel tersebut mempunyai tajuk Sekarang saya ingin menggantikan tajuk pelayar dengan tajuk artikel selepas artikel dimuatkan Struktur html adalah seperti berikut

<!doctype html>
<html data-ng-app="app">
<head data-ng-controller="head">
 <meta charset="utf-8"/>
 <titlte data-ng-bind="title||'Document'"></title>
</head>
<body>
 <p data-ng-controller="main">
  <button data-ng-click="getPost()">GET POST</button>
  <p data-ng-module="post">
   <h2 data-ng-bind="post.title"></h2>
   <article data-ng-bind="post.content"></article>
  </p>
 </p>
</body>
</html>

Iaitu, selepas siaran dimuatkan, tajuk penyemak imbas dan post.title dipaparkan sama.

Saya telah mencari penyelesaian komunikasi merentas domain dan melihat ini (Bagaimanakah pengawal AngularJS berkomunikasi? Daripada ketiga-tiga kaedah ini, dua yang pertama tidak sesuai untuk struktur semasa saya, jadi saya menggunakan kaedah ketiga dan melaksanakannya, tetapi perkara yang membawa maut ialah ia perlu disegerakkan melalui pencetus (klik, dll.), jadi sebenarnya, saya hanya ingin bertanya bagaimana untuk menyegerakkan secara automatik dan bukannya menyegerakkan melalui pencetus

2.

$skop panggil balik,
Ambil artikel memuatkan ini sebagai contoh, artikel yang dimuatkan mengandungi kod yang dibalut dengan teg pra Selepas dimuatkan, perpustakaan lain perlu digunakan untuk melaksanakan penyerlahan, jadi operasi penyerlahan perlu dilakukan selepas data diikat dan diberikan. . Namun, saya tidak menemui sebarang penyelesaian.
Saya juga menulis sendiri, dan saya mendapat yang terbaik daripada kedua-dua dunia
Jenis pertama:
Selepas pengikatan data, tanya secara rekursif semua teg pra halaman semasa dan serlahkannya selepas ia ditemui atau selepas beberapa kali
Jenis kedua:
window.setTimeout(function(){}, 1000);
Hasil daripada kedua-dua kaedah ialah yang pertama tidak berfungsi Tidak kira berapa kali kita mengulangi, kita tidak dapat mencari tag pra
Pilihan kedua mungkin, tetapi saya rasa ia bukan penyelesaian yang baik

过去多啦不再A梦
过去多啦不再A梦

membalas semua(2)
巴扎黑

Tidak faham apa yang anda maksudkan dengan komunikasi merentas domain? Mungkinkah ia komunikasi antara pengawal? Dan pencetus?

1. Hanya tulis ng-bind terus tanpa menggunakan data-* seperti ini
2. Pengawal di mana <title> terletak berada pada tahap yang sama dengan pengawal main. Anda boleh menambah pengawal induk di luar mereka dan mainController.$scope.$parent.title = post.title, atau menggunakan $rootScope secara langsung (tidak disyorkan). Anda juga boleh melakukan ini melalui $emit/$broadcast/$on tetapi ia tidak perlu.
Kemudian:

<title ng-bind="$parent.title||'Default Title'"></title>

3. Anda boleh mencari beberapa pemalam penyerlahan yang bagus pada github menggunakan angular highlight sebagai kata kunci. pemasangan bower
4. Jangan gunakan window.setTimeout Gunakan $timeout() yang disediakan oleh sudut.
5. Sebenarnya, cara yang lebih baik untuk menyelesaikan masalah kedua ialah menggunakan perkhidmatan $resource.get().$promise.then(); // atau $http untuk memastikan data jauh dimuatkan sebelum pelaksanaan.

Ty80

Tambahkan kelas wtitle pada elemen tajuk dalam templat yang memaparkan artikel dan tajuk halaman semasa akan ditukar kepada tajuk artikel.
Anda juga boleh melakukannya dalam WeChat~

Fungsi wtitle adalah untuk menetapkan kandungan element.text() sebagai document.title Tujuan menggunakan iframe adalah untuk menjadikannya berkesan dalam paparan web apl

javascriptapp.directive('wtitle', [
  '$timeout',
  '$document',
  function($timeout, $document){
    return {
      restrict: 'AC',
      link: function($scope, $element, $attrs){
        var watch = $scope.$watch(function(){
          return $element.text().replace(/(^\s*)|(\s*$)/g, '');
        }, function(title){
          // 空标题不显示
          if(/^\s*$/.test(title)){
            return;
          }
          $document[0].title = title;
          var $body = angular.element($document[0].body);
          var $iframe = angular.element('

<iframe style="visibility:hidden;" src="/path/to/iframe.png"></iframe>

');
          $iframe.on('load', function(){
            $timeout(function(){
              $iframe.off('load').remove();
            }, 5);
          });
          $body.append($iframe);
        });

        $scope.$on('$destroy', watch);
      }
    };
  }
]);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan