te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Angular2 JQuery, how to make the document.ready function - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Angular2 JQuery, how to make the document.ready function - Stack Overflow

programmeradmin4浏览0评论

I could use some help in order to make the JQuery function run without any button click. Right now it only works when I have a button to click on, so the JQuery will fire.

Code

declare var jQuery: any;

@Component({
selector: 'home-ponent',
providers: [],
moduleId: module.id,
encapsulation: ViewEncapsulation.None,
templateUrl: 'homeponent.html',
styleUrls: ['homeponent.css'],
directives: [BannerComponent],
})

export class HomeComponent implements OnInit {

    constructor(public productService: ProductService, private elref: ElementRef) {

    }

    ngOnInit(): any {
        console.log("jQuery here");
        jQuery(this.elref.nativeElement).find('button').on('click', function ()          {
            jQuery('#owl-example').owlCarousel();
        });
    }

}

This code is ofc inside a ponent. It finds the button, and on click, it will run the jQuery function.

What I want is to make this line:

jQuery('#owl-example').owlCarousel();

Fire when the ngOnInit is called (without any button click). To do so I need to implement the JQuery:

$(document).ready(function() { }

The problem here is that it does not work :) What I have tried so far are this peace of code:

ngOnInit(): any {
    console.log("jQuery here");
    jQuery(this.elref.nativeElement).ready(function() {
        jQuery('#owl-example').owlCarousel();
    });
}

Hope someone can help.

I could use some help in order to make the JQuery function run without any button click. Right now it only works when I have a button to click on, so the JQuery will fire.

Code

declare var jQuery: any;

@Component({
selector: 'home-ponent',
providers: [],
moduleId: module.id,
encapsulation: ViewEncapsulation.None,
templateUrl: 'home.ponent.html',
styleUrls: ['home.ponent.css'],
directives: [BannerComponent],
})

export class HomeComponent implements OnInit {

    constructor(public productService: ProductService, private elref: ElementRef) {

    }

    ngOnInit(): any {
        console.log("jQuery here");
        jQuery(this.elref.nativeElement).find('button').on('click', function ()          {
            jQuery('#owl-example').owlCarousel();
        });
    }

}

This code is ofc inside a ponent. It finds the button, and on click, it will run the jQuery function.

What I want is to make this line:

jQuery('#owl-example').owlCarousel();

Fire when the ngOnInit is called (without any button click). To do so I need to implement the JQuery:

$(document).ready(function() { }

The problem here is that it does not work :) What I have tried so far are this peace of code:

ngOnInit(): any {
    console.log("jQuery here");
    jQuery(this.elref.nativeElement).ready(function() {
        jQuery('#owl-example').owlCarousel();
    });
}

Hope someone can help.

Share Improve this question edited Apr 21, 2017 at 13:44 marc_s 755k184 gold badges1.4k silver badges1.5k bronze badges asked Jul 29, 2016 at 8:56 MikkelMikkel 1,81111 gold badges37 silver badges62 bronze badges 5
  • 1 jQuery('#owl-example').owlCarousel(); you should never do such things. – dfsq Commented Jul 29, 2016 at 9:00
  • And why should I not do that? – Mikkel Commented Jul 29, 2016 at 9:03
  • 1 Because you hardcoded CSS selector, not flexible. – dfsq Commented Jul 29, 2016 at 9:06
  • You mean the Id?.. maybe I should make a class or something for all the carousels :)? – Mikkel Commented Jul 29, 2016 at 9:13
  • No, you should never need to use CSS selectors at all. It's the same anti-pattern as manipulating DOM in controller in Angular1. Now you ponent code is coupled to HTML, which is bad. – dfsq Commented Jul 29, 2016 at 9:15
Add a ment  | 

3 Answers 3

Reset to default 8

I would guess that on ngOnInit the element with id #owl-example does not exists yet, because it is in the same ponent as where the ngOnInit gets called. You have to use the ngAfterViewInit function:

ngAfterViewInit(): void {
   jQuery('#owl-example').owlCarousel();
}

You can then be sure that any element in your ponent exists in the document.

You can write this code within ngAfterViewInit hook

ngAfterViewInit(){    
  jQuery('#owl-example').owlCarousel();
}

I did it and it works!

import { Component, OnInit, AfterViewInit } from '@angular/core';

declare var jQuery: any;

@Component({
  selector: 'app-banners',
  templateUrl: './banners.ponent.html',
  styleUrls: ['./banners.ponent.css']
})
export class BannersComponent implements AfterViewInit {

  ngAfterViewInit(): void {
   jQuery('.slider').slider({full_width: true});
}


  constructor() { }

  ngOnInit() {


  }

}
发布评论

评论列表(0)

  1. 暂无评论