#javascript #angularjs #angularjs-scope
#javascript #angularjs #angularjs-scope
Вопрос:
У меня есть массив объектов, в котором есть два вложенных объекта. Структура такая, как показано ниже. У меня есть функции просмотра для просмотра любого обновления, отправки или удаления внеклассных вложенных объектов. Но эти функции запускаются только один раз. У меня нет никакой функции остановки для этих функций просмотра.Поэтому я их не останавливаю. Пожалуйста, дайте мне знать, где я ошибаюсь
$scope.class.student.extraCurriculars = { игры: [{ название: ‘Volley Ball’, количество команд: 10 }, { название: ‘Chess’, количество команд: 2 }], искусство: [{ танец: { тип: ‘Bharatham’, количество команд: ‘1’}, музыка: { тип: ‘Carnatic’, количество команд: ‘1’ }] } }
Каждый учащийся может участвовать более чем в одной игре и более чем в одном искусстве.
**studentExtraCurriculum.html**
<div class="ui raised blue segment">
<div class="ui accordion" ng-repeat="game in class.student[curSection - 1].extraCurriculars.games">
<div class="title">
<div class="ui green label">{{$index 1}}</div>
<select ng-model="game.name" ng-options="game as game.name for game in gamesList">
<option value="">{{gamesList.game.name}}</option>
</select>
<input type="text" size="3" placeholder="Team count" ng-model="game.teamCount "></input>
</div>
</div>
</div>
<div class="ui small button" ng-click="pushGames()">Add a Game</div>
<div class="ui raised blue segment">
<div class="ui accordion" ng-repeat="art in class.student[curSection - 1].extraCurriculars.arts">
<div class="title">
<div class="ui green label">{{$index 1}}</div>
<select ng-model="art.name" ng-options="art as art.name for game in artList">
<option value="">{{artList.art.name}}</option>
</select>
<input type="text" size="3" placeholder="Team count" ng-model="art.teamCount "></input>
</div>
</div>
</div>
<div class="ui small button" ng-click="pushArts()">Add a Art</div>
MyController.js
var extraCurriculumController = function($scope, $log, StudentService, $stateParams, ClassService, Modal, $compile, $window) {
function {
...
}
function {
...,
}
function _init(){
...
//Inside Init I have added watch functions
$scope.$watchCollection(
"class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("Deep change bat");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
}
);
$scope.$watchCollection(
"class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("Deep change bowl");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
}
);
//watch for shallow change in array
$scope.$watch("class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("Shallow change bat");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
}
);
$scope.$watch("class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("Shallow change bowl");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
}
);
//deep change tree lookup
$scope.$watch("class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("tree change bat");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
},
true
);
$scope.$watch("class.student[curSection - 1].extraCurriculars",
function(newValue, oldValue) {
console.log("tree change bowl");
console.log("Old value");
console.log(oldValue);
console.log("New Value");
console.log(newValue);
},
true
);
//End of watch function
}
}
Комментарии:
1. С вашей точки зрения, которую вы используете,
ng-repeat="game in class.student.extraCurriculars.games"
почему вы смотрите"class.student[curSection - 1].extraCurriculars"
, откуда берется [curSection — 1]? (Кроме того, вы просматриваете объект extraCurriculars, а не коллекции)2. Извините, я пропустил добавить эту часть в код. Добавлено сейчас.
3. Ошибка все еще остается
4. С этим у меня тоже были проблемы.. Не уверен, поможет ли это: github.com/angular/angular.js/issues/2621 Похоже на багги.
5. Но ты смотришь
class.student[curSection - 1].extraCurriculars.games
? В вашем коде указано$watchCollection('class.student[curSection - 1].extraCurriculars'...
, что это наблюдение за объектом, содержащим массивы, а не за самими массивами.