If we need to know when an input element state changes due to user interaction, we can use the ng-change directive.
In point 1 of the example we have two different text input elements bound to the same editValue model variable. The first input has a change handler called onEditChange, while the second one has no change handlers. If you type something in the first input you can see that the value of the model variable is changed and the change handler is fired thus updating the result string, while if you type something in the second input you see that the model variable still changes (the change is reflected in the first input), but the change handler is not fired (the result string doesn't change) because the change on the first input is not due to a user interaction, but to a model change. The change event is fired only as a consequence of a user interaction with the element to which the handler is attached and not as a consequence of a change in the model.
Point 2 simply shows that we can use the ng-change directive also with checkboxes. In general we can use it with any input element that changes the model as well.
Point 3 shows what happens if we bind a change handler to an input element without binding also a model variable. In this case, the change event handler is never fired because we need both a model variable and a change handler bound to an input element to monitor its changes.
Unlike mouse and keyboard events, here we don't have an $event variable available to retrieve additional data in the event handler.