8

有没有办法让 HTML 视图中包含来自服务器的预填充值,然后让 AngularJS 将这些值读入其中$scope

我正在考虑 HTML 是这样的场景:

<div ng-controller="TestController">
    <div ng-bind="title">Test Title</div>
    <div ng-bind="itemCount">33</div>
    <div ng-repeat="item in items">
        <div ng-bind="item.title">Item 1 Title</div>
    </div>
</div>
<button ng-click="update()">Update</button>

JavaScript 是这样的:

function TestController($scope) {
    $scope.update = function() {
        console.log($scope.title); // Should log "Test Title"
    };
}

这背后的想法是让服务器呈现搜索引擎可以索引的HTML ,但具有内容的JavaScript 模型表示,以便通过 JS 进行操作。

4

3 回答 3

7

虽然ng-init是一种解决方案,但它需要您显式设置值。所以这里有一个替代解决方案。

http://plnkr.co/edit/pq8yR9zVOHFI6IRU3Pvn?p=preview

注意:此解决方案不适用于ng-repeat. 控制流指令不能与此一起使用。但是对于从中简单地提取信息ng-bind来说效果很好。您需要做的就是将default指令(plunk 中的代码)添加到您正在执行绑定的任何位置,它将提取文本内容并将其推送到范围变量。

编辑(使用 ng-repeat 的解决方案):

所以,我在想一种方法让 ng-repeat 也以同样的方式工作。但是让 ng-repeat 像这样工作并不是一件容易的事(请参阅代码以获取证明:P)。我终于找到了解决方案 - 给你:

http://plnkr.co/edit/GEWhCNVMeNVaq9JA2Xm2?p=preview

在使用它之前,您需要了解几件事。这还没有经过彻底的测试。它仅适用于重复数组(而不是对象)。可能存在未涵盖的情况。我正在覆盖 ngRepeat 本身,这可能会产生其他后果。当您遍历项目(在您的服务器端代码中)时,不要忘记添加default="true"第一个元素和default其余元素。

希望这可以帮助。

于 2013-04-05T13:48:17.960 回答
0

我认为您真正想要的是通过并行提供静态文件来使您的应用程序可搜索。在此处阅读更多信息http://www.yearofmoo.com/2012/11/angularjs-and-seo.html

于 2013-04-05T23:01:15.810 回答
0

将值添加 ng-init到您的元素中,以便它以您想要的方式工作。

http://docs.angularjs.org/api/ng.directive:ngInit

于 2013-04-05T13:39:31.130 回答