Ярлыки переменных $scope в шаблонах AngularJs
В моем контроллере я назначаю:
$scope.currentThing.data
И в моем шаблоне иногда мне нужно
currentThing.data.response[0].hello
и иногда
currentThing.data.otherStuff[0].goodbye
//or
currentThing.data.anotherThing[0].goodMorning
Поэтому мне было интересно, возможно ли создать ярлык для этих переменных прямо в шаблонах, что-то вроде:
{{response = currentThing.data.response[0]}}
Так что я могу использовать это так {{response.hello}}
,
В общем, возможно ли назначить временные переменные из шаблона? Мне не нужно привязывать данные, они нужны мне только для генерации шаблона, и тогда они могут исчезнуть навсегда
3 ответа
Вы можете сделать это в контроллере, как здесь: http://jsbin.com/moyuhe/1/edit
app.controller('firstCtrl', function($scope){
$scope.currentThing = {
data: [
{response:[
{hello:1},
{hello:2}
]}
]
};
$scope.temp = $scope.currentThing.data[0];
});
HTML:
<div ng-controller="firstCtrl">
{{temp.response |json }}
</div>
Да, это возможно с использованием синтаксиса, как
{{ variable = ( expression ) }}
в любом месте HTML-шаблона (не только ng-init
как некоторые предполагают).
Это исключительно полезно в тех случаях, когда вам нужно использовать вычисляемую переменную больше раз - ее не нужно вычислять каждый раз.
Пример
<!-- can use it before -->
<p> Calculated value is {{calculated}} </p>
<div ng-repeat=" item in calculated = ( allItems | filter1 | filter2 | filter3 ) ">
{{item}}
</div>
<!-- can use it after-->
<p> Calculated value is still {{calculated}} </p>
Редактировать: так в вашем случае{{response = ( currentThing.data.response[0] ) }}
Вы могли бы использовать ngInit: https://docs.angularjs.org/api/ng/directive/ngInit
Хотя кажется, что использование его вне ngRepeat неодобрительно.
<div ng-init="myvar = currentThing.data.response[0]">
<span>{{myvar.hello}}</span>
</div>
Я не проверял это таким образом, но это самое близкое, что я могу придумать, которое может решить вашу проблему.