It is important to note that these properties stay in sync (technically
known as being "bound"). That is, if the value of componentProperty
changes in the component, outerProperty will be updated to reflect that
change. The reverse is true as well.

In addition to making properties available, actions can be made available
to components. This allows data to flow back up to its parent. You pass actions
like this.

It is important to note that actions can only be passed from a controller or another
component. They cannot be passed from a route. See passing an action to the component
for more details on how to pass actions.

Positional Params

In addition to passing parameters in by name, you can pass them in by position.
In other words, you can invoke the above component example like this:

Then you can use the attributes in the component exactly as if they had been
passed in like {{blog-post title=post.title body=post.body}}.

Notice that the positionalParams property is added to the class as a
static variable via reopenClass. Positional params are always declared on
the component class and cannot be changed while an application runs.

Alternatively, you can accept an arbitrary number of parameters by
setting positionalParams to a string, e.g. positionalParams: 'params'. This
will allow you to access those params as an array like so: