【问题标题】:Setting a variable in the .config service in Angular JS?在 Angular JS 的 .config 服务中设置变量?
【发布时间】:2015-09-16 13:38:10
【问题描述】:

我有这个代码...

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

这个 sn-p 充当我在不同控制器之间设置和读取的全局变量。此变量控制标记为活动的链接。

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

此外,我尝试使用$location.path() 来获取我的路径并根据该值构建一个函数,但$location.path() 是静态的,所以这也不起作用。

我有这条路由 sn-p 控制我加载哪些内容...

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'
            });
});

如果我能以某种方式在这里设置一个可以在控制器中读取的变量,我会很高兴,但我不确定该怎么做。

我将如何做到这一点?

【问题讨论】:

  • 您应该将您的工厂转换为提供者,以便在配置阶段可以访问它

标签: javascript angularjs variables dynamic config


【解决方案1】:

试试这个。每当状态改变时,它应该设置路由的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);
      });
    });

【讨论】:

    【解决方案2】:

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

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

    有一个很好的线程。

    How to highlight a current menu item?

    【讨论】:

    • 如何在 when 函数中定义作用域变量?
    • @Allenph 我的意思是在控制器中定义一个范围变量。我建议为每个页面定义一个控制器,并在 when 函数中将控制器注册到页面。
    • 这似乎有点重复,也是一种不受欢迎的方式,因为我正在交付不需要控制器的静态内容。这是唯一的选择吗?
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 2016-03-16
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多