【问题标题】:Angular apply scope changes from global function cause unknown provider error全局函数的角度应用范围更改导致未知提供程序错误
【发布时间】:2014-06-12 08:20:40
【问题描述】:

jsfiddle:http://jsfiddle.net/3gd8a/1/

(function () {
    var app = angular.module("index", []);

    app.run(function ($log, $controller) {
        $log_service = $log;
        $controller_service = $controller;
    });

    app.controller("AlertsController", function () {
        this.alerts = [ "first alert" ];
        this.innerFunction = function() {
            this.alerts.push("inner alert");
            $log_service.debug(alerts.alerts);
        };
    });
})();

function outerFunction() {
    var alerts = $controller_service("AlertsController");
    alerts.alerts.push("outer alert");
    $log_service.debug(alerts.alerts);
};

在这个例子中我改变了外部js函数中控制器实例的属性,

现在我不知道如何像使用 $scope.apply() 一样应用它。

我已经阅读了 angular-tips watch-how-the-apply-runs-a-digest,

$scope 有 $apply 函数,但控制器实例没有。

您可能想问为什么我使用控制器实例而不是 $scope,因为我从 codeschool 学习 Angular js,所以我想尽可能使用我学到的相同方式。

您可能想问为什么不使用 ng-click,我知道使用 ng-click 会起作用,但我想弄清楚 Angular js 如何监视控制器实例的属性以及如何手动应用它们的更改。

编辑:

当我被ng-controller="AlertsController as alerts" 使用时,我发现控制器实例只是$scope 下一个名为alerts 的属性。

现在我遇到了另一个问题,如果我从 outerFunction 访问 $scope 会导致错误。

第一次是Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope http://errors.angularjs.org/1.2.1/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope angular.js:78

第二次是 Error: [$injector:cdep] Circular dependency found: http://errors.angularjs.org/1.2.1/$injector/cdep?p0=

【问题讨论】:

标签: angularjs


【解决方案1】:

由于没有人回答,我把答案留在这里。

控制器实例是初始化后$scope下的对象,在示例中我将AlertsController别名为alerts,所以它在$scope下命名为alerts

那么$scope.alertsthis 是等价的。

在第一条评论 (http://jsfiddle.net/3gd8a/5) 中,我尝试将 $scope 设置为全局,然后从 outerFunction 访问它,但失败了,我仍然需要找出原因。

在第二条评论(http://jsfiddle.net/3gd8a/6)我发现$scope可以从控制器内部的元素中获取,并且可以正常访问。

所以从全局函数更新和应用控制器实例属性的方法是

  1. 为控制器内的任何元素添加 id
  2. 使用angular.element 查找该元素,然后调用.scope() 以获取范围。
  3. 使用scope.{alias of controller}.{property name}更新属性,然后调用$scope.apply申请。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2014-02-14
    • 2022-11-12
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多