fix(ngBind): use same string representation as $interpolate
Fixes #11716
BREAKING CHANGE:
`ngBind` now uses the same logic as $interpolate (i.e. {{myString}}) when
binding, which means values other than strings are now transformed as following:
- null / undefined become empty string
- with an object's custom toString() function, except if the object is a Date, Array, or Number
- otherwise with JSON.stringify
Previously, ngBind would use always use toString().
The following examples show the different output:
```js
$scope.myPlainObject = {a: 1, b: 2};
$scope.myCustomObject = {a: 1, b: 2, toString: function() {return 'a+b';}};
```
Plain Object:
```html
<!-- Before: -->
<span ng-bind="myPlainObject">[object Object]</span>
<!-- After: -->
<span ng-bind="myPlainObject">{"a":1,"b":2}</span>
```
Object with custom toString():
```html
<!-- Before: -->
<span ng-bind="myCustomObject">[object Object]</span>
<!-- After: -->
<span ng-bind="myCustomObject">a+b</span>
```
If you want the output of `toString()`, you can use it directly on the value in ngBind:
```html
<span ng-bind="myObject.toString()">[object Object]</span>
``` M
Martin Staffa committed
fa80a61a05a3b49a2c770d5544cb8480907a18d3
Parent: a5fd2e4