Как передавать javascript выражение в ui-grid=“” (AngularJS)

371
25 декабря 2016, 22:10

Есть такой массив:

$scope.ChemicalGroups
[
    ...
    HashName: "G815D9D3776614A985A4B18E437349DE2"
    ...
]

Есть такой код:

$scope.ChemicalGroups.forEach(function (chemicalGroup) {
        var valStrl = chemicalGroup.HashName;
            chemicalGroup[valStrl] = {
                enableColumnMenus: false,
                enableHorizontalScrollbar: 2,
                enableVerticalScrollbar: 2,
                data: []
            };
});

Т.е у меня может быть сколько угодно элементов в массиве ChemicalGroups и для каждого нужно создать ui-grid. Поле HashName я хочу использовать как уникальное имя grid-а (gridOptions).

Код html:

<div id="{{item.Id}}" class="panel-collapse collapse in">
    <div class="panel-body">
        <div ui-grid="item[HashName]" class="grid">
        </div>
    </div>
</div>

В этом случае генерируется исключение, пишет: Token '[' is not a valid

Так тоже не получается - ui-grid={{item[HashName]}}

Пытался делать так:

$scope.ChemicalGroups.forEach(function (chemicalGroup) {
                var valStrl = chemicalGroup.HashName;
                var model = $parse(valStrl);
                model.assign($scope, {
                    enableColumnMenus: false,
                    enableHorizontalScrollbar: 2,
                    enableVerticalScrollbar: 2,
                    data: []
                });
            });

Html:

<div id="{{item.Id}}" class="panel-collapse collapse in">
    <div class="panel-body">
        <div ui-grid="item.HashName" class="grid"></div>
    </div>
</div>

В этом случае в стандартном скрипте ui-grid.js происходит исключение т.к туда передается строка HashName. Хотя в $scope я добавил перед этим объект, который называется так же как строка HashName - model.assign($scope... (я проверял в $scope он есть). Но это выражение: ui-grid="item.HashName" получает почему-то не объект а строку.

Как сделать чтобы он распознал именно объект с таким именем? Возможно ли в ui-grid="" передавать какое-либо javascript выражение, например такое: {{item[HashName]}}, насколько я понял так делать нельзя. Любые предложения.

Answer 1

Так как имя поля у тебя хранится в поле HashName у объекта. То и получать объект нужно именно по значению находящемуся в этом поле:

<div ui-grid="item[item.HashName]" class="grid">
READ ALSO
Одна из точек входа не попадает в сборку

Одна из точек входа не попадает в сборку

При сборке проекта содержимое последней точки входа не попадает в итоговую сборку:

341
Как вызвать метод?

Как вызвать метод?

ЗдравствуйтеПомогите, пожалуйста, разобраться в том, как вызвать метод, который привязан к событию нажатия кнопки

379
overflow у класса fancybox-inner

overflow у класса fancybox-inner

Есть блок - на картинкевозле поля выскакивает блок с ошибкой если она есть

333
Не работает ClientWidth

Не работает ClientWidth

Высоту окна (браузера) выводит правильно, а ширину выводит всего экрана а не окна (браузера)При этом имеется боковой scroll, должен вывести ширину...

411