Задать вопрос
@DarCKoder

Почему Angular не работает с циклом?

При написании цикла на js, весь Angular скрипт и атрибуты выключаются, и выводится только сам цикл.
Как можно исправить?

Весь Скрипт:
var myApp = angular.module("myApp" , []);

myApp.controller("firstCtrl", function($scope){
    $scope.name = "World";
});

myApp.controller('PhoneListCtrl', function($scope){
	$scope.phones  = [
		{'name' : 'Nexus',
		 'snippet' : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
		 'status': true},
		{'name' : 'HTC',
	 	 'snippet' : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
	 	 'status' : false},
	 	{'name' : 'Huawei',
	 	 'snippet' : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
	 	 'status' : true}
	];

	var date = new Date();
	$scope.today = date;
       
      //Цикл
	myNumber = 10;
	function newFunc(number){
		newArray = new Array(number);
		for (var i = 0; i < newArray.length; i++) {
			newArray[i] = 'Number: ' + (i + 1) + '<br />';
			document.write(newArray[i]);
		};
	};
	newFunc(myNumber);
});
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
Насколько я понял из вашего описания проблемы, дело в document.write - он просто перезаписывает все, что есть на странице (подробнее).
Вам нужно писать в innerHtml какого-то конкретного элемента - вот так:
var myNumber = 10;

function newFunc(number) {
    var el = document.getElementById('bar'),
        content = '';
    
    for (var i = 1; i <= number; i++) {
        content += 'Number: ' + i + '<br />';
    }
    
    el.innerHTML = content;
}

newFunc(myNumber);


А с массивами лучше работать так (вот почему):
var myNumber = 10;

function newFunc(number) {
    var newArray = [],
          str;

    for (var i = 0; i < number; i++) {
        str = 'Number: ' + (i + 1) + '<br />';
        newArray.push(str);
        console.log(str);
    }
}

newFunc(myNumber);


Это при условии, что вам действительно потом нужен этот массив, и вы не используете его как кривую замену обычному оператору for:
var myNumber = 10;

function newFunc(number) {
    for (var i = 1; i <= number; i++) {
        console.log('Number: ' + i + '<br />');
    }
}

newFunc(myNumber);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вот смотрю я и удивляюсь, зачем вам аргуляр?

document.write - причина вашей проблемы. Просто откажитесь от этого. Вот эта вся сатана которую вы делаете в контроллере можно сделать в шаблоне (и нужно делать там).

<ul>
    <li ng-repeat="phone in phones">Number: {{$index + 1}}</li>
</ul>


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

Войдите, чтобы написать ответ

Похожие вопросы
Крона Лабс Екатеринбург
от 200 000 ₽
TravelLine Санкт-Петербург
от 250 000 ₽
Леон Санкт-Петербург
от 200 000 ₽