Javascript 如何初始化angular.js控制器数据内联;对",;方式
我知道如何通过http请求上的承诺来实现这一点,但在这种情况下,必须从内联脚本初始化数据 此控制器已在标头js中定义:Javascript 如何初始化angular.js控制器数据内联;对",;方式,javascript,angularjs,Javascript,Angularjs,我知道如何通过http请求上的承诺来实现这一点,但在这种情况下,必须从内联脚本初始化数据 此控制器已在标头js中定义: var testModule = angular.module('myTestModule', []); testModule.controller('testCtrl', function ($scope) { $scope.data = []; }); 以下html加载,为了便于讨论,假设完成脚本部分需要很长时间: <div ng-app="myTestMo
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>
...
setInitialData(['boo','far']);
如果内联脚本是在div with ng应用程序之前加载的,我不会有问题,但在这种情况下,它可能会在控制器实例化之后加载。我试图避免一个额外的http请求,尽管使用promise和angular服务很方便
有人知道如何构造函数setInitialData以便将数据应用于控制器/作用域吗?您可以使用
angular.element(…).scope()
方法获取对任何DOM元素作用域的引用(protip:useangular.element($0.scope())
在devtools JS控制台中,在“元素”选项卡中获取当前选定元素的范围)
从那里,您可以根据需要对范围进行更改。确保调用$apply()
,使AngularJS意识到更改
e、 g
...
函数setScopeValue(选择器、scopeProp、值){
angular.element(选择器).scope().$apply(函数($scope){
$scope[scopeProp]=值;
});
}
函数setInitialData(数据){
setScopeValue(“#testCtrl”、“数据”、“数据”);
}
setInitialData(['boo','far']);
请注意,my
setScopeValue()
函数仅适用于单一级别的属性访问,因此不支持点。如果需要设置嵌套属性,则需要使用$parse()
创建一个setter函数,您可以使用$scope
和要设置的值来调用该函数。如您所述,使用“正确”的方法,正如您已经提到的,当数据可用于应用程序时,在满足第一个请求时发出两个请求似乎是浪费。我意识到问题在于如何让内联脚本工作,但为什么?您是否考虑过从控制器或应用程序的运行块内部调用setInitializedData?这与自定义框架限制有关。Javascript被放在主体之外的一个单独的内容块中。感谢您的快速帮助。有一个警告;jqLite不能与“#testCtrl”选择器一起使用。最后我使用了angular.element(document.getElementById(id))
<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>