Angular4:jQuery和angular2-materialize在路由导航后不起作用

时间:2017-07-03 04:17:56

标签: jquery angular materialize

使用angular-cli创建了一个角度4项目。在angular-cli.json文件中导入了css和js。

"styles": [
    "../node_modules/materialize-css/dist/css/materialize.css",
    "styles.css"
],
"scripts": [
    "../node_modules/jquery/dist/jquery.js",
    "../node_modules/hammerjs/hammer.js",
    "../node_modules/materialize-css/dist/js/materialize.js",
    "../src/assets/js/init.js"
],

init.js具有以下功能

(function($) {
    $(function() {
        $('.slider').slider();
        $('.button-collapse').sideNav();
        $('.carousel').carousel();
        // $('.carousel.carousel-slider').carousel({fullWidth: true});
        $('.carousel').carousel({
            dist: 0,
            shift: 0,
            padding: 20,
        });

    }); // end of document ready
})(jQuery);

在app.module.ts中导入MaterializeModule 从' angular2-materialize';

导入{MaterialiseModule}

当我们第一次登陆页面或刷新时,滑块按预期工作。

问题:当我们使用router-link导航时,页面导航正确但javascript函数没有被调用。

从主页<a routerLink="/blog/abc-1">Blog</a>

进行路由

我试过:`blog.component.ts

import { Component, OnInit } from '@angular/core';
import { MaterializeModule } from 'angular2-materialize';

import * as $ from 'jquery';

import * as Materialize from 'materialize-css';


declare let Materialize : any;

@Component({
  selector: 'app-blog',
  templateUrl: './blog.component.html',
  styleUrls: ['./blog.component.css']
})
export class BlogComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    Materialize('.slider').slider();
  }

}

` 错误: 得到错误: 错误TypeError:a.addEventListener不是函数

at http://localhost:4200/vendor.bundle.js:15611:765
at Array.forEach (native)

1 个答案:

答案 0 :(得分:7)

经过大量迭代后解决了这个问题。 解: 如果要在angular-cli.json中导入js,则无需再在组件中导入相同的内容。重复的结果,你会得到奇怪的javascript异常,这将导致误导。 只需声明它们并像下面的代码一样使用它。

declare let $ : any;

另外在Onngint(){}方法中再次调用javascript函数。必须在将使用此功能的每个组件中调用此方法。 以下示例:

    ngOnInit() {
        $(function(){
            $('.button-collapse').sideNav();
        }); // end of document ready
    }

请记得检查文件准备好了。不检查导致脚本的早期执行。