我在MVC应用程序中使用angularJS并使用angularJS中的ajax调用加载部分。我使用$ compile来编译html。一切都在当地工作正常,但它不是在生产。出现意外错误。以下是我正在使用的代码。
角度控制器:
app.controller("mproductController", ["$scope", "mproductService", "$compile", function ($scope, mproductService, $compile) {
$scope.ShowProdUnitPop = function (val) {
mproductService.ShowProdUnitPop(val).success(function (result) {
debugger;
var snippet = angular.element(result);
$compile(snippet)($scope);
$("#dvAddProd").html(snippet);
$("#dvPopup").modal('show');
});
}
}
Angular Service:
app.service("mproductService", ["$http", function ($http) {
this.ShowProdUnitPop = function () {
var request = $http({
method: "post",
url: "/Home/GetActiveCat"
});
return request;
}}
MVC控制器:
[HttpPost]
public ActionResult AddProduct(int id)
{
ViewBag.ProductCategory = Utility.GetProd(id);
return PartialView("_AddProduct",new Product());
}
错误在于抛出这一行:
var snippet = angular.element(result);
$compile(snippet)($scope);
$("#dvAddProd").html(snippet);
$("#dvPopup").modal('show');
它正在本地工作,而不是生产。请帮忙。
答案 0 :(得分:0)
似乎您在生产服务器上启用了捆绑和缩小功能。当您使用该控制器时,这会破坏您的控制器代码,并且在缩小JS文件时必须具有DI的内联数组注释。
最可能的答案是你使用$compile
将它注入控制器并使用它,这没关系。看起来您没有在控制器中跟踪内联数组依赖注入。
此外,您需要将compile元素附加到dvAddProd
元素,而不是更新html
,将HTML附加到DOM将永远不会对该元素进行角度角度绑定。看起来这个代码不应该在任何环境上工作,如果它有角度绑定。
<强>控制器强>
app.controller('someCtrl', ['$scope', '$http', '$compile',
function($scope, $http, $compile) {
//you should have controller in this way that would fix your issue
//note I'm using inline array notation of DI
$scope.ShowProdUnitPop = function(val) {
mproductService.ShowProdUnitPop(val).success(function(result) {
debugger;
var snippet = angular.element(result);
var compiledSnippet = $compile(snippet)($scope);
$("#dvAddProd").append(compiledSnippet); //should attach compile element
});
}
}
]);
访问this link了解更多信息