2

我正在编写一个 Web 应用程序,主要使用 AngularJS 的模块化和可测试性以及 ASP.NET MVC 服务器端技术进行模型验证。

想法是PartialViewng-views 中加载 s,以便仅异步加载特定的逻辑部分。所以问题是:如何更好地将服务器端对象传递给 AngularJS 控制器?想到的一个愚蠢的技巧是打印以下内容PartialView

window.myValue = 42;

$window然后使用注入的服务从控制器中取回它:

$scope.myValue = $window.myValue

但是,这是不可行的,因为加载会在将部分内容插入 DOM 之前ng-view删除每个标签。<script>

我注意到有ng-init指令,我应该单独依靠那个吗?一般来说,使这两个部分相互协作的最佳实践是什么?

谢谢。

4

2 回答 2

1

如果您无法使用 REST 服务(最佳选择),您可以轻松地完全按照您在问题中的建议进行操作,但可能采用更模块化的方式。您可以对视图模型进行编码并将其放置在全局变量中,然后使用服务将其提取出来:

这是一个例子:

<body ng-controller="MainCtrl">

    <div>ID: {{data.id}}</div>
    <div>Name: {{data.name}}</div>

    <script type='text/javascript'>
       // mystuff = @Html.Raw(Json.Encode(Model));  Encode the model to json
        mystuff = { id: 1, name: 'the name'};     
    </script>

</body>

app.controller('MainCtrl', function($scope, DataService) {
  $scope.data = DataService.getData('mystuff');
});

app.factory('DataService', function($window) {

  var service = {}

  service.getData = function(data) {
    if ($window[data] !== undefined)
      return $window[data]; 
    else 
      return undefined;
  }

  return service;

});

演示: http ://plnkr.co/edit/jqm2uT3kbDm2U30MCf48?p=preview

您可能希望创建一个在所有页面中使用的标准化模型。这有点笨拙,正如其他人所说,REST 服务是您的最佳选择。

于 2013-07-13T21:55:53.193 回答
1

我最终使用了该ng-init指令。

幸运的是,我不得不重新构建 Web 应用程序,并选择一个单页、客户端、仅基于 Web 服务的应用程序。

于 2013-10-07T11:48:40.617 回答