DoneJS StealJS jQuery++ FuncUnit DocumentJS
5.33.3
6.0.0 4.3.0 3.14.1 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-bind
      • can-compute
      • can-debug
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-backup
      • can-define-stream
      • can-define-stream-kefir
      • can-event-queue
      • can-kefir
      • can-list
      • can-map
      • can-map-compat
      • can-map-define
      • can-observable-array
      • can-observable-object
      • can-observation
      • can-observation-recorder
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Views
      • can-attribute-observable
      • can-component
        • define
          • extend
          • tag
          • view
          • ViewModel
        • create
          • <tag bindings...>
          • new Component
        • elements
          • <can-slot>
          • <can-template>
        • lifecycle hooks
          • connectedCallback
        • deprecated
          • beforeremove
          • <content>
          • events
          • helpers
          • leakScope
          • viewModel
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-element
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-nodelist
      • can-view-parser
      • can-view-scope
      • can-view-target
      • steal-stache
    • Data Modeling
      • can-connect
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-tag
      • can-fixture
      • can-fixture-socket
      • can-local-store
      • can-memory-store
      • can-ndjson-stream
      • can-query-logic
      • can-realtime-rest-model
      • can-rest-model
      • can-set-legacy
      • can-super-model
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-hash
      • can-route-mock
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-diff
      • can-globals
      • can-join-uris
      • can-key
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-queues
      • can-string
      • can-string-to-any
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-child-nodes
      • can-control
      • can-dom-data
      • can-dom-events
      • can-dom-mutate
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-fragment
    • Data Validation
      • can-define-validate-validatejs
      • can-type
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-data-types
      • can-namespace
      • can-reflect
      • can-reflect-dependencies
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

connectedCallback

  • Edit on GitHub

A lifecycle hook called after the component's element is inserted into the document.

connectedCallback: function (element) { ... }

Use to orchestrate property bindings that would otherwise be a stream or an inappropriate side-effect during a getter.

For example, the following listens to changes on the name property and counts them in the nameChanged property:

<my-component></my-component>

<script type="module">
import {Component} from "can";

Component.extend({
  tag: "my-component",
  view: `
      <p>Name changed: {{nameChanged}}</p>
      <p>Name: <input value:bind="name"/></p>
  `,
  ViewModel: {
      nameChanged: {type: "number", default: 0},
      name: "string",
      connectedCallback( element ) {
          this.listenTo( "name", function() {
              this.nameChanged++;
          } );
          const disconnectedCallback = this.stopListening.bind( this );
          return disconnectedCallback;
      }
  }
});
</script>

connectedCallback is named as such to match the web components spec for the same concept.

Returns

{function|undefined}:

The disconnectedCallback function to be called during teardown. Defined in the same closure scope as setup, it's used to tear down anything that was set up during the connectedCallback lifecycle hook. If undefined is returned, the default disconnectedCallback function will be the viewModel's stopListening function. So if you overwrite disconnectedCallback, you probably want to make sure stopListening is called.

Use

Checkout the Video Player for a good example of using connectedCallback to create side effects. For example, it listens to the viewModel's playing and currentTime and calls side-effectual DOM methods like .play().

connectedCallback(element) {
    this.listenTo("playing", function(event, isPlaying) {
        if (isPlaying) {
            element.querySelector("video").play();
        } else {
            element.querySelector("video").pause();
        }
    });
    this.listenTo("currentTime", function(event, currentTime) {
        const videoElement = element.querySelector("video");
        if (currentTime !== videoElement.currentTime) {
            videoElement.currentTime = currentTime;
        }
    });
}

As a reminder, event bindings bound with listenTo (which is available on can-define/map/map) will automatically be torn down when the component is removed from the page.

CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 5.33.3.

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news