Разница между onLoad и ng-init в угловых
Я учусь на угловой. Я не понимаю, в чем разница между onLoad и ng-init для инициализации переменной. В какой области он создает эту переменную.
For example
<ng-include onLoad="selectedReq=reqSelected" src="'partials/abc.html'"></ng-include>
OR
<ng-include ng-init="selectedReq=reqSelected" src="partials/abc.html"></ng-include>
Пожалуйста, дайте мне представление об изолированной области видимости.
3 ответа
ng-init
это директива, которая может быть размещена внутри div
"S, span
х, что угодно, тогда как onload
это атрибут, специфичный для ng-include
директива, которая функционирует как ng-init
, Чтобы увидеть, что я имею в виду, попробуйте что-то вроде:
<span onload="a = 1">{{ a }}</span>
<span ng-init="b = 2">{{ b }}</span>
Вы увидите, что появляется только второй.
Изолированная область - это область, которая не прототипно наследуется от родительской области. С точки зрения непрофессионалов, если у вас есть виджет, которому не нужно произвольно читать и писать в родительскую область видимости, тогда вы используете изолированную область виджета, чтобы виджет и контейнер виджетов могли свободно использовать свои области видимости, не переопределяя свойства друг друга.
Из угловой документации,
ng-init НЕ ДОЛЖЕН использоваться для какой-либо инициализации. Он должен использоваться только для псевдонимов. https://docs.angularjs.org/api/ng/directive/ngInit
onload следует использовать, если какое-либо выражение необходимо оценить после загрузки частичного представления (с помощью ng-include). https://docs.angularjs.org/api/ng/directive/ngInclude
Основное различие между ними заключается в использовании с ng-include.
<div ng-include="partialViewUrl" onload="myFunction()"></div>
В этом случае myFunction вызывается каждый раз, когда загружается частичное представление.
<div ng-include="partialViewUrl" ng-init="myFunction()"></div>
Тогда как в этом случае myFunction вызывается только один раз, когда загружается родительское представление.
Работает для меня.
<div ng-show="$scope.showme === true">Hello World</div>
<div ng-repeat="a in $scope.bigdata" ng-init="$scope.showme = true">{{ a.title }}</div>