Javascript 主模块中的调用函数';Angular.js中的s$scope

Javascript 主模块中的调用函数';Angular.js中的s$scope,javascript,angularjs,Javascript,Angularjs,我有一个Angular.js项目,主模块定义如下: var app = angular.module('app', [ /* Some libraries... */ 'UserControllers' ]); app.controller('MainController', function($scope, $location) { var UserId = null; var Username = null; $scope.setUserInfo = fu

我有一个Angular.js项目,主模块定义如下:

var app = angular.module('app', [ /* Some libraries... */
    'UserControllers' ]);
app.controller('MainController', function($scope, $location) {
    var UserId = null;
    var Username = null;

    $scope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}
    function showModal($uibModal, $previousState) {
        $previousState.memo("modalInvoker");
        var stateName = this.name;
        var templateUrl = this.templateUrl;
        $uibModal.open({
            templateUrl: templateUrl,
            controller: function ($uibModalInstance, $scope) {
                var isopen = true;
                $uibModalInstance.result.finally(function() {
                    isopen = false;
                    $previousState.go("modalInvoker");
                });
                $scope.close = function () {
                    $uibModalInstance.dismiss('close');
                };
                $scope.$on("$stateChangeStart", function(evt, toState) {
                    if(!toState.$$state().includes[stateName]) {
                        $uibModalInstance.dismiss('close');
                    }
                });
            }
        });
    }
(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope) {
    /* Login checks and requests... */ 
    /* Need to call the setUserInfo */
}
}();
主模块的控制器定义如下:

var app = angular.module('app', [ /* Some libraries... */
    'UserControllers' ]);
app.controller('MainController', function($scope, $location) {
    var UserId = null;
    var Username = null;

    $scope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}
    function showModal($uibModal, $previousState) {
        $previousState.memo("modalInvoker");
        var stateName = this.name;
        var templateUrl = this.templateUrl;
        $uibModal.open({
            templateUrl: templateUrl,
            controller: function ($uibModalInstance, $scope) {
                var isopen = true;
                $uibModalInstance.result.finally(function() {
                    isopen = false;
                    $previousState.go("modalInvoker");
                });
                $scope.close = function () {
                    $uibModalInstance.dismiss('close');
                };
                $scope.$on("$stateChangeStart", function(evt, toState) {
                    if(!toState.$$state().includes[stateName]) {
                        $uibModalInstance.dismiss('close');
                    }
                });
            }
        });
    }
(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope) {
    /* Login checks and requests... */ 
    /* Need to call the setUserInfo */
}
}();
在网站主页中,用户可以加载外部登录表单,并将其加载到如下模式:

var app = angular.module('app', [ /* Some libraries... */
    'UserControllers' ]);
app.controller('MainController', function($scope, $location) {
    var UserId = null;
    var Username = null;

    $scope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}
    function showModal($uibModal, $previousState) {
        $previousState.memo("modalInvoker");
        var stateName = this.name;
        var templateUrl = this.templateUrl;
        $uibModal.open({
            templateUrl: templateUrl,
            controller: function ($uibModalInstance, $scope) {
                var isopen = true;
                $uibModalInstance.result.finally(function() {
                    isopen = false;
                    $previousState.go("modalInvoker");
                });
                $scope.close = function () {
                    $uibModalInstance.dismiss('close');
                };
                $scope.$on("$stateChangeStart", function(evt, toState) {
                    if(!toState.$$state().includes[stateName]) {
                        $uibModalInstance.dismiss('close');
                    }
                });
            }
        });
    }
(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope) {
    /* Login checks and requests... */ 
    /* Need to call the setUserInfo */
}
}();
加载页面中的表单使用在主页中加载的文件中定义的控制器,如下所示:

var app = angular.module('app', [ /* Some libraries... */
    'UserControllers' ]);
app.controller('MainController', function($scope, $location) {
    var UserId = null;
    var Username = null;

    $scope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}
    function showModal($uibModal, $previousState) {
        $previousState.memo("modalInvoker");
        var stateName = this.name;
        var templateUrl = this.templateUrl;
        $uibModal.open({
            templateUrl: templateUrl,
            controller: function ($uibModalInstance, $scope) {
                var isopen = true;
                $uibModalInstance.result.finally(function() {
                    isopen = false;
                    $previousState.go("modalInvoker");
                });
                $scope.close = function () {
                    $uibModalInstance.dismiss('close');
                };
                $scope.$on("$stateChangeStart", function(evt, toState) {
                    if(!toState.$$state().includes[stateName]) {
                        $uibModalInstance.dismiss('close');
                    }
                });
            }
        });
    }
(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope) {
    /* Login checks and requests... */ 
    /* Need to call the setUserInfo */
}
}();
完成所有登录检查后,我基本上需要调用在主模块/页面范围内定义的函数setUserInfo。我可以通过调用$scope.$parent.close()来关闭模式,但我不能调用setUserData,因为它似乎在另一个作用域中


非常感谢您的帮助。

使用rootScope获取用户数据:

app.controller('MainController', function($scope, $rootScope, $location) {
    var UserId = null;
    var Username = null;

    $rootScope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}

(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope, $rootScope) {
    /* Login checks and requests... */ 
    $rootScope.setUserInfo(uid, un); //...
}
}();

将rootScope用于用户数据:

app.controller('MainController', function($scope, $rootScope, $location) {
    var UserId = null;
    var Username = null;

    $rootScope.setUserInfo = function(userId, username) {
        UserId = userId;
        Username = username;
    };
}

(function() {
"use strict";

var login = angular.module("UserControllers", [  ]);
login.controller("LoginCtrl", function($http, $scope, $rootScope) {
    /* Login checks and requests... */ 
    $rootScope.setUserInfo(uid, un); //...
}
}();
现在将服务包括在控制器和模式控制器中:

app.controller('MainController', function($scope, $rootScope, $location, example) {
//now call your set user data function to share data from modal to  controller
var UserId = null;
var Username = null;

    $rootScope.setUserInfo = function(userId, username) {
      UserId = userId;
      Username = username;
    };
}

    (function() {
"use strict";

var login = angular.module("UserControllers", [example ]);
login.controller("LoginCtrl", function($http, $scope, $rootScope, example) {
  /* Login checks and requests... */ 
  $rootScope.setUserInfo(uid, un); //...
  }
}();
现在将服务包括在控制器和模式控制器中:

app.controller('MainController', function($scope, $rootScope, $location, example) {
//now call your set user data function to share data from modal to  controller
var UserId = null;
var Username = null;

    $rootScope.setUserInfo = function(userId, username) {
      UserId = userId;
      Username = username;
    };
}

    (function() {
"use strict";

var login = angular.module("UserControllers", [example ]);
login.controller("LoginCtrl", function($http, $scope, $rootScope, example) {
  /* Login checks and requests... */ 
  $rootScope.setUserInfo(uid, un); //...
  }
}();

非常好用,谢谢。在不使用$rootScope的情况下,还有其他方法可以做到这一点吗?是的,我建议使用服务。这取决于用户,在某些情况下,最好使用事件处理,因此受影响的作用域会发出、根作用域广播以及对事件感兴趣的任何作用域都会对其进行操作。但特别是对于登录的用户信息,我总是推荐rootScope。非常好用,谢谢。在不使用$rootScope的情况下,还有其他方法可以做到这一点吗?是的,我建议使用服务。这取决于用户,在某些情况下,最好使用事件处理,因此受影响的作用域会发出、根作用域广播以及对事件感兴趣的任何作用域都会对其进行操作。但特别是对于登录的用户信息,我始终建议使用rootScope。