如何从视图控制器访问app控制器(AppCtrl)$ scope

时间:2017-02-15 16:39:19

标签: angularjs ionic-framework

我在AppCtrl.js中有这个:

$scope.facebookUserDone = $q.defer();

我希望从视图的控制器访问此变量:

WeightLevel.js:

$q.when($scope.facebookUserDone.promise).then(function () {
                $scope.userFaceUrl = userr.pictureUrl;
});

这可能或者我应该将变量放在$ rootScope上吗?

由于

3 个答案:

答案 0 :(得分:2)

创建一个工厂来存储变量,然后将此工厂注入两个控制器。

angular
    .module('app')
    .factory('dataservice', dataservice);

function dataservice($http, logger) {
    var dataStore = {};
    return {
        setVariable: setVariable,
        getVariable: getVariable
    };

    function setVariable(name,value) {
        dataStore[name] = value;
    }

    function getVariable(name){
       return dataStore[name]
    }
}

控制器

angular.module('app').controller('MyCtrl', myCtrl);

myCtrl.$inject = ['$scope','dataservice'];

function myCtrl($scope,dataservice){
    dataservice.setVariable('foo','bar');
    $scope.foo = dataservice.getVariable('foo');
}

使用dataservice,您现在可以设置setVariable并将其存储到工厂,并使用dataservice.getVariable方法从任何控制器访问它。

答案 1 :(得分:0)

在两个控制器中创建服务和注入。

答案 2 :(得分:0)

提供一些其他解决方案。您可以使用值或事件(取决于您的设置,因为您可能会遇到一些并发问题)。

以下示例描述了您的案例中角度值的用法,并假设您的模块名为“app”。

angular
    .module('app')
    .value('states', {
        facebookUser: null
    });

然后在你的AppCtrl中,你可以注入“states”值,将其设置为延迟的承诺:

angular
    .module('app')
    .controller('AppCtrl', ($q, states) => {
        states.facebookUser = $q.defer();
    });

这样您就可以注入并访问其他控制器中的值。

如果您只需要某种全局状态,使用值可能会很棒。如果您需要更强大的东西,使用服务或工厂可能更合适。