【发布时间】: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=
【问题讨论】:
-
修改后的版本:jsfiddle.net/3gd8a/5
-
最终版本jsfiddle.net/3gd8a/6,我应该通过控制器下的元素获取范围。
标签: angularjs