У меня есть следующая проблема. Существует служба, которая отвечает за сохранение определенного идентификатора объекта. И когда объект выбран, $ rootScope передает событие, чтобы уведомить задействованного контроллера.
var SelectedObjectFactory = function (objectsFactory, $rootScope) {
var selectedObjectId;
var selObjFactory = {};
selObjFactory.SelectObject = function (objectID) {
selectedObjectId = objectID
$rootScope.$broadcast("ObjectSelected", { selectedId: selectedObjectId });
};
selObjFactory.GetSelectObjectId = function() {
return selectedObjectId;
};
return selObjFactory;
};
SelectedObjectFactory.$inject = ['objectsFactory', '$rootScope'];
app.factory("selectedObjectFactory", SelectedObjectFactory);
И я использую $ scope.attachedProperties в связи с нг-повтора, чтобы создать список свойств.
var FormController = function ($scope, selectedObjectFactory, eventPropertiesFactory) {
$scope.$on("ObjectSelected", function (event, selectedObject) {
$scope.attachedProperties = eventPropertiesFactory.GetPropertiesForEventById(selectedObject.selectedId);
});
}
FormController.$inject = ['$scope', 'selectedObjectFactory', 'eventPropertiesFactory'];
angular.module("svgObjectsApp").controller("FormController", FormController);
И я использую $ scope.attachedProperties в связи с нг-повтора, чтобы создать список свойств.
<div class="col-lg-3" ng-controller="FormControler">
<table>
<tbody>
<tr ng-repeat="property in attachedProperties">
<td class="col-lg-6 tabletitle">{{property.propertyName}}</td>
<td class="col-lg-6"><input type="text" value={{property .propertyValue}}/> </td>
</tr>
</tbody>
</table>
</div>
В контроллере $ scope. $ On работает нормально. В инструменте разработчика я вижу, что все переменные обновляются.
Проблема в списке в html не создана. Я предполагаю, что мне не хватает что-то о том, как ng-repeat derictive работает с контроллером, но не может найти решение в документации Angular JS.
И второй вопрос - это хороший способ использования $ broadcast() для информирования администратора об изменениях в сервисе.
Update: Это attachedPropertyFactory код:
var AttachedPropertiesFactory = function() {
var propertiesArray = [];
var propertiesFactory = {};
propertiesFactory.PutNewPropertiesInArray = PutNewPropertiesInArray;
propertiesFactory.GetPropertiesForEventById = GetPropertiesForEventById;
function GetPropertiesForEventById(eventId) {
selectedProperties = [];
for (var i = 0; i < propertiesArray.length; i++) {
if (propertiesArray[i].eventId === eventId) {
selectedProperties.push(propertiesArray[i]);
}
}
return selectedProperties;
}
function PutNewPropertiesInArray(properties) {
ClearPropertiesArray();
for (var i = 0; i < properties.length; i++) {
propertiesArray.push(properties[i]);
}
};
function ClearPropertiesArray() {
propertiesArray.length = 0;
}
return propertiesFactory;
};
AttachedPropertiesFactory.$inject = [];
angular.module("svgObjectsApp").factory("eventPropertiesFactory", AttachedPropertiesFactory);
Вы также можете написать код eventPropertiesFactory. Может возникнуть проблема, или вы получите данные обратно в $ scope. attachedProperties? – V31
Можете ли вы объявить $ scope.attachProperties как пустой массив, прежде чем делать $ scope. $ On call – Gabs00
@ V31 Я поставил код eventPropertyFactory для обновления моего вопроса. – AndriyL