我觉得我陷入了为我的 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/