37

当我的应用程序加载以设置默认状态时,我想做一些事情。所以我试图在 Module 对象上使用 run 方法。当我尝试访问 $scope 变量时,虽然我在控制台中收到“未捕获的 ReferenceError:$scope 未定义”消息。

请参阅以下示例http://jsfiddle.net/F2Z2X/1/

app = angular.module('myapp', []);

app.controller('mycontroller', function($scope){
    $scope.data = { myvariable: 'Hello' };
});

app.run(
    alert($scope.data.myvariable))
);

我对这一切都错了吗?

例如,我想在开始时运行一次 watchAction 函数,以隐藏尚未调用的 UI 元素,但 watchAction 函数没有 $scope 对象,因为它没有被 watch 方法调用所以我必须将它传递给它,但可惜它不可用。

4

2 回答 2

78
app.run(function ($rootScope) {
    $rootScope.someData = {message: "hello"};
});

您只能被$rootScope注入servicesrun运行,因为每个child scope都是从其父作用域继承的,而顶级作用域是rootScope. 因为注入任何范围都是模棱两可的。仅提供根范围。

于 2013-06-28T19:06:04.543 回答
3
var app = angular.module('myApp', []);
app.run(function ($rootScope) {
    // use .run to access $rootScope
    $rootScope.rootProperty = 'root scope';
});

app.controller("ParentCtrl", ParentCtrlFunction);
app.controller("ChildCtrl", ChildCtrlFunction);
function ParentCtrlFunction($scope) {
    // use .controller to access properties inside ng-controller
    //in the DOM omit $scope, it is inferred based on the current controller
    $scope.parentProperty = 'parent scope';
}
function ChildCtrlFunction($scope) {
    $scope.childProperty = 'child scope';
    //just like in the DOM, we can access any of the properties in the
    //prototype chain directly from the current $scope
    $scope.fullSentenceFromChild = 'Same $scope: We can access: ' +
    $scope.rootProperty + ' and ' +
    $scope.parentProperty + ' and ' +
    $scope.childProperty;
}  

例如。https://github.com/shekkar/ng-book/blob/master/7_beginning-directives/current-scope-in​​troduction.html

这是一个简单的流程,我们有rootScope,parentScope,childScope。在每个部分中我们都分配了相应的范围变量。我们可以访问parentScope中的$rootScope,childScope中的rootScope和parentScope。

于 2014-05-28T13:06:37.527 回答