我知道如何使用http请求中的承诺执行此操作,但在这种情况下,必须从内联脚本初始化数据。
此控制器已在标头js中定义:
var testModule = angular.module('myTestModule', []);
testModule.controller('testCtrl', function ($scope) {
$scope.data = [];
});
以下html加载,为了论证,让我们说完成脚本部分需要很长时间:
<div ng-app="myTestModule" ng-controller="testCtrl">
...
</div>
<script type="text/javascript">
setInitialData(['boo', 'far']);
</script>
如果在使用ng-app的div之前加载了内联脚本,我就不会遇到问题,但在这种情况下,它可能会在实例化控制器后加载。我试图避免额外的http请求,尽管通过角度服务使用promise非常方便。
有没有人对如何构造函数setInitialData有任何想法,以便将数据应用于控制器/范围?
答案 0 :(得分:1)
您可以使用angular.element(...).scope()
方法获取对任何DOM元素的范围的引用(protip:在devtools JS控制台中使用angular.element($0).scope()
以获取Elements中当前所选元素的范围标签)。
从那里,您可以根据需要更改范围。请务必致电$apply()
以使AngularJS了解更改。
e.g。
<div ng-app="myTestModule" ng-controller="testCtrl" id="testCtrl">
...
</div>
<script type="text/javascript">
function setScopeValue(selector, scopeProp, value) {
angular.element(selector).scope().$apply(function ($scope) {
$scope[scopeProp] = value;
});
}
function setInitialData(data) {
setScopeValue('#testCtrl', 'data', data);
}
setInitialData(['boo', 'far']);
</script>
请注意,我的setScopeValue()
函数仅适用于单个级别的属性访问,因此不支持点。如果您需要设置嵌套属性,则可以使用$parse()
创建一个可以使用$scope
调用的setter函数和要设置的值。