我觉得我一直在搞清楚我的mvc.NET / angularjs项目的解决方案。
目前我觉得我做得很好,抽象视图使用控制器,控制器是controller.cs特定类的类型名称,例如:
<body ng-controller="@Model.ControllerType.Name">
...
</body>
这是控制器
superSiteApp.controller("MediaController", ["$scope", "$window", "SubNavFactory", function ($scope, $window, SubNavFactory) {
...
});
这项工作看起来效果很好,但最近我一直在努力研究与subnav相关的项目。有一节我基本上是暴力强迫它(因为它不是这样的服务)在这种情况下,我正在建立一个工厂:
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。
这里的方法可能不正确,因为这是我唯一能想到的事情。任何建议都将不胜感激。
由于
答案 0 :(得分:0)
在考虑了一段时间之后,我将使用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();
}
};
}
]);