Javascript 在Angular JS中的.config服务中设置变量?

Javascript 在Angular JS中的.config服务中设置变量?,javascript,angularjs,variables,dynamic,config,Javascript,Angularjs,Variables,Dynamic,Config,我有这个密码 spa.factory("linkFactory", function() { var linkFactoryObject = {}; linkFactoryObject.currentLink = "home"; return linkFactoryObject; }); 这个代码段充当一个全局变量,我在不同的控制器之间设置和读取它。此变量控制标记为活动的链接 我的代码运行得非常好。唯一的问题是,如果您第一次进入我的网页时我没有在工厂中设置初始值,则主页

我有这个密码

spa.factory("linkFactory", function() {
    var linkFactoryObject = {};
    linkFactoryObject.currentLink = "home";
    return linkFactoryObject;
});
这个代码段充当一个全局变量,我在不同的控制器之间设置和读取它。此变量控制标记为活动的链接

我的代码运行得非常好。唯一的问题是,如果您第一次进入我的网页时我没有在工厂中设置初始值,则主页链接将不会设置为活动。如果我设置了初始值,那么当有人刷新页面时,该值将重置为初始值。这意味着主页链接将处于活动状态,但实际上您将位于不同的页面上

此外,我尝试使用$location.path获取路径并根据该值构建函数,但$location.path是静态的,因此也不起作用

我有一个路由片段,它控制我加载的内容

spa.config(function($routeProvider, $locationProvider) {
    $routeProvider
            .when('/home', {
                templateUrl: '/partials/home.html'
            })
            .when('/about', {
                templateUrl: '/partials/about.html'
            })
            .when('/skills', {
                templateUrl: '/partials/skills.html'
            })
            .when('/experience', {
                templateUrl: '/partials/experience.html'
            })
            .when('/resume', {
                templateUrl: '/partials/resume.html'
            })
            .when('/contact', {
                templateUrl: '/partials/contact.html'
            })
            .otherwise({
                redirectTo: '/home'
            });
});
如果我可以在这里设置一个变量,我可以在我的控制器中读取它,我会很乐意去做,但我不确定如何去做


我如何才能做到这一点?

试试这个。当状态改变时,它应该设置路由的url

spa.factory("linkFactory", function() {
        var linkFactoryObject = {};
        linkFactoryObject.currentLink = "home";
        linkFactoryObject.setRoute = function(route) 
        {
          linkFactoryObject.currentLink = route;
        };
        return linkFactoryObject;
    });

    spa.run(['linkFactory','$rootScope',function(linkFactory,$rootScope) {
      $rootScope.$on('$routeChangeStart', function(event, next, current) {
        linkFactory.setRoute(next.$$route.originalPath);
      });
    });

而不是注册$routeChangeStart事件。如果不需要为每个页面定义单独的控制器,也可以定义默认控制器。在控制器中,您可以将值设置为当前链接

我建议您仅为此定义一个范围变量,并检查范围变量以为链接设置适当的类

这上面有一条很好的线


您应该将工厂转换为提供程序,以便可以在配置阶段内访问。如何在when函数中定义范围变量?@Allenph我的意思是在控制器中定义范围变量。我建议为每个页面定义一个控制器,并将控制器注册到when函数中的页面。这似乎有点重复,而且是一种不需要的方式,因为我提供的是不需要控制器的静态内容。这是唯一的选择吗?