AngularJS использует глобальную переменную в шаблоне для значения orderBy ng-repeat - PullRequest
0 голосов
/ 24 апреля 2019

Я работаю над угловым приложением, у которого нет доступа к исходному приложению только к html-коду компонента. Я хочу изменить порядок массива с помощью пользовательской функции, но я не уверен, что в шаблоне можно получить доступ к глобальным переменным.

Работает и сортирует поля по значению свойства "name".

<div ng-repeat="$field in $fields | orderBy:'name' track by $field.name " >
   <input ng-model="$item[$field.name] " />
</div>

Если я попробую это, это не будет работать

Не работает

<script>var orderByProperty = 'name'; </script>
<div ng-repeat="$field in $fields | orderBy:orderByProperty track by $field.name " >
   <input ng-model="$item[$field.name] " />
</div>

Как я могу получить доступ к глобальным переменным из углового шаблона?

У меня нет доступа к коду контроллера приложения или главному js-файлу приложения, только к html-компоненту . Решение, как упорядочить массив в шаблоне, также решит эту проблему.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Как я могу получить доступ к глобальным переменным из углового шаблона [JS]?

Вы не можете.

Из документов:

Выражения AngularJS похожи на выражения JavaScript со следующими отличиями:

  • Контекст: Выражения JavaScript сравниваются с глобальным окном. В AngularJS выражения сравниваются с объектом области действия.

Для получения дополнительной информации см.

0 голосов
/ 25 апреля 2019

Вы можете использовать ng-init для добавления некоторых переменных в html как:

<body ng-controller="MainCtrl as ctrl" ng-init="orderByProperty = 'name'">
    <div ng-repeat="$field in $fields | orderBy:orderByProperty track by $field.name ">
        <input ng-model="$field.name" />
    </div>        
</body>
...