Angular Material を知っています。これはAngular単一ページのアプリケーションで使用するためのMaterial Design仕様の実装に役立ちます。
しかし、私は見て Material Design Lite 私のAngularプロジェクトと統合する代替。MaterialDesign Liteを統合するための最善の方法を知りたいとAngularJSアプリ。
Emjayの2番目の答えは私にとってはうまくいきました。 upgradeAllRegistered
メソッドをAngularのrun
ブロックにトスすることで、ボイラープレートをさらに減らすことができます。
angular.module('app', [])
.run(function ($rootScope,$timeout) {
$rootScope.$on('$viewContentLoaded', ()=> {
$timeout(() => {
componentHandler.upgradeAllRegistered();
})
})
});
免責事項:私はこのプロジェクトの著者です
angularアプリでMaterial Design Lite
を使用できます。
angular Material Design Liteの上にあるラッパーを探していると思います。
このパッケージは非常に開発が進んでおり、構成可能なオプション(フローティングテキストフィールド)で実装されたいくつかのディレクティブが既にあります http://jadjoubran.github.io/angular-material-design-lite/
角度で記述された完全なUIが必要な場合は、 Angular Material を使用できます
この問題をレンダリングしていましたが、javascript CDM(メニューなど)を使用してより多くのデザイン要素が動的にレンダリングされ、正しくレンダリングされませんでした。新しい要素が追加されたときにのみcomponentHandler.upgradeDom()を実行するソリューションを作成しました。
var app = angular.module('app');
app.run(function () {
var mdlUpgradeDom = false;
setInterval(function() {
if (mdlUpgradeDom) {
componentHandler.upgradeDom();
mdlUpgradeDom = false;
}
}, 200);
var observer = new MutationObserver(function () {
mdlUpgradeDom = true;
});
observer.observe(document.body, {
childList: true,
subtree: true
});
/* support <= IE 10
angular.element(document).bind('DOMNodeInserted', function(e) {
mdlUpgradeDom = true;
});
*/
});
問題が解決しました!
Material Design Lite Webサイトで指示されているように.cssおよび.jsファイルを含めることができ、アプリをブートストラップするとき、またはコントローラーがロードするときに次のことを行うだけです。
angular.element(document).ready(
function() {
componentHandler.upgradeAllRegistered();
});
または
$scope.$on('$viewContentLoaded', () => {
$timeout(() => {
componentHandler.upgradeAllRegistered();
})
});
要素をアップグレードする総当たり的な方法はあまりありません。間隔をチェックしたり、何かが変更されたときにDOM全体をアップグレードしたりする必要はありません。 MutationObserverはすでに何が変更されたかを正確に伝えます。
window.addEventListener('load', function() {
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function( mutation ) {
if (mutation.addedNodes)
window.componentHandler.upgradeElements(mutation.addedNodes);
})
});
observer.observe(document.body, {
childList: true,
subtree: true
});
});