Разница между onLoad и ng-init в angular
Я изучаю angular. Я не понимаю, в чем разница между onLoad и ng-init для инициализации varibale. В какой области он создает эту переменную.
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>
Пожалуйста, дайте мне некоторое представление об изолированном объеме.
Ответы
Ответ 1
ng-init
- это директива, которая может быть помещена внутри div
's, span
' s, независимо от того, а onload
является атрибутом, специфичным для директивы ng-include
, которая функционирует как ng-init
. Чтобы увидеть, что я имею в виду, попробуйте что-то вроде:
<span onload="a = 1">{{ a }}</span>
<span ng-init="b = 2">{{ b }}</span>
Вы увидите, что появляется только вторая.
Изолированная область видимости - это область, которая не прототипически наследуется от ее родительской области. Если у вас есть виджет, который не нужно читать и записывать в родительскую область произвольно, вы используете область виджета для виджета, чтобы виджет и контейнер виджетов могли свободно использовать свои области действия без переопределения свойств друг друга.
Ответ 2
В документации angular
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 вызывается только один раз при загрузке родительского представления.
Ответ 3
Работает для меня.
<div ng-show="$scope.showme === true">Hello World</div>
<div ng-repeat="a in $scope.bigdata" ng-init="$scope.showme = true">{{ a.title }}</div>