javascript - 如何以 "right"方式内联初始化 angular.js Controller 数据

标签 javascript angularjs

我知道如何通过 http 请求上的 promise 来执行此操作,但在这种情况下,必须从内联脚本初始化数据。

该 Controller 已在 header 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 之前加载的,我不会遇到问题,但在这种情况下,它可能会在 Controller 实例化后加载。我试图避免额外的 http 请求,尽管使用带有 Angular 服务的 promise 很方便。

有人知道如何构造函数 setInitialData 以便将数据应用到 Controller /作用域吗?

最佳答案

您可以使用 angular.element(...).scope() 方法来获取对任何 DOM 元素范围的引用(提示:使用 angular.element($0 ).scope()(在 devtools JS 控制台中获取“元素”选项卡中当前选定元素的范围)。

从那里您可以根据需要更改范围。确保调用 $apply() 以使 AngularJS 意识到更改。

例如

<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() 创建一个 setter 函数,您可以使用 $scope 和要设置的值来调用。

关于javascript - 如何以 "right"方式内联初始化 angular.js Controller 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007525/

相关文章:

javascript - 无法删除 Javascript 对象并在 Angular js 范围内创建新实例

javascript - Karma + ui-router 失败 : Cannot read property 'isDefined' of undefined

javascript - 包含 jquery-mobile.js 链接后不再重定向

javascript - 单击标题时,排序 ngTable 不起作用

javascript - AngularJS $rootScope.$on 在迁移到 Angular2 的上下文中的替代方案

javascript - Angular Directive(指令)未获取更新的 Controller 数据

angularjs - 如何检测用户是否单击Angularjs中的浏览器后退按钮

javascript - 实际上什么是未定义?

javascript - 获取以前的 URL 以用于重定向

javascript - Jquery/Ajax - 在 HTML 中获取图片和 Youtube