javascript - 需要将服务/工厂存储为值

标签 javascript c# asp.net-mvc angularjs

我觉得我陷入了为我的 mvc.NET/angularjs 项目寻找解决方案的困境。

目前,我觉得我通过抽象 View 以使用 Controller (例如,controller.cs 特定类的类型名称)做得很好:

<body ng-controller="@Model.ControllerType.Name">
...
</body>

这是 Controller

superSiteApp.controller("MediaController", ["$scope", "$window", "SubNavFactory", function ($scope, $window, SubNavFactory) {
         ...
});

这项工作似乎效果很好,但最近我一直在处理与子导航相关的项目。对于一个部分,我基本上是暴力破解它(因为它不是这样的服务)在这种情况下,我正在建立一个工厂:

var superSiteApp = angular.module('superSiteApp', []);
superSiteApp.factory("SubNavFactory", ["subNavCollectionWrapper", function (subNavCollectionWrapper) {
    return {
        get: function() {
            return subNavCollectionWrapper.get();
        }
    };
}]);

后来我把它推到这里,如下所示:

@section AdditionalHeaderLinks
{
    <script language="javascript" type="text/javascript">
        superSiteApp.value("subNavCollectionWrapper", {
            get: function() {
                return @Html.Raw(Json.Encode(Model.Menus[1].Links));
            }
        });
    </script>
}   

这部分效果很好,但现在我需要在调用 api 的地方做一个。

所以这个想法是这样的:

superSiteApp.service("SubNavFactoryUri", ["$http", "uri", function ($http, uri){
    return $http.get(uri);
}]);

这就是我迷路的地方。在我的新 View.chtml 文件中,我不知道如何使该连接正常工作。

@section AdditionalHeaderLinks
{
    <script language="javascript" type="text/javascript">
        superSiteApp.value("subNavCollectionWrapper",  /* this is my struggle */);
    </script>
} 

我不知道如何引用服务来传递它。是的,我可以自己创建一个函数类,但我想我应该利用 angularjs。

也许这里的方法是不正确的,因为这是我唯一能想到做的事情。任何建议将不胜感激。

谢谢

最佳答案

经过一段时间的思考,我将事情从使用 value() 方法更改为提供工厂。有一些事情我需要解决,但我把它分解得越多,它就越有意义。

现在的想法是:

// same as before, this is for hard coded elements
superSiteApp.factory("SubNavFactory", ["subNavCollectionWrapper", function(subNavCollectionWrapper) {
    return {
        "get": function () {
            return subNavCollectionWrapper.get();
        }
    };
}]);

// This is the idea from above
superSiteApp.service("SubNavServiceUri", ["$http", function($http) {
    return { 
        get: function(uri) { 
            return $http.get(uri); 
        }
    };
}]);


// now we put them together. I'll use the get(action) method to call the item
superSiteApp.factory("SubNavFactories", ["SubNavFactory", "SubNavServiceUri", function(SubNavFactory, SubNavServiceUri) {
        return {
            "ActionName1": {
                "get": function () {
                    return SubNavServiceUri.get("/the/rest/api");
                }
            },
            "ActionName1": SubNavFactory,
            "get" : function(action) {
                return this[action].get();
            }
        };
    }
]);

关于javascript - 需要将服务/工厂存储为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28647196/

相关文章:

javascript - 在设定时间内从零增加到数字

c# - 三角函数 sin C# Cos & Cos A

c# - 有没有办法在 C# 中强制执行函数内联?

c# - 如何拆分字符串并将其插入 DataTemplate 中的 Binding

javascript - 如何使用 ASP.NET MVC 3/jQuery 实现即时搜索框?

c# - 登录并将授权属性添加到操作后无法访问 Controller 操作

javascript - Jquery提交表单而不刷新

javascript - 有没有什么好的Eclipse开发javascript的插件

javascript - .height() 以百分比返回高度,如何以像素为单位获取它

javascript - 无法读取未定义的属性 'BarRenderer'