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

时间:2015-06-29 22:37:02

标签: javascript angularjs variables dynamic config

我有这段代码......

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

此代码段充当全局变量,我在不同的控制器之间设置和读取。此变量控制哪个链接标记为活动。

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

此外,我已尝试使用$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'
            });
});

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

我将如何做到这一点?

2 个答案:

答案 0 :(得分:0)

试试这个。它应该在状态改变时设置路由的URL

int count =0;
public void printAllPathWithSum(Node node, int sum, ArrayList<Integer> list)
{   
    if(node == null)
        return;
    if(node.data<=sum)
    {
        list.add(node.data);
        if(node.data == sum)
            print(list);
        else
        {
            count ++;
            printAllPathWithSum(node.left, sum-node.data, list);
            printAllPathWithSum(node.right, sum-node.data, list);
            count --;
        }
    }
    if(count != 0)
        return ;


    printAllPathWithSum(node.left, this.sum, new ArrayList());
    if(count != 0)
        return;
    printAllPathWithSum(node.right, this.sum, new ArrayList());

}
public void print(List list)
{
    System.out.println("Next path");
    for(int i=0; i<list.size(); i++)
        System.out.print(Integer.toString((Integer)list.get(i)) + " ");
    System.out.println();
}

答案 1 :(得分:0)

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

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

这方面有一个很好的主题。

How to highlight a current menu item?