数据绑定如何在AngularJS框架中工作?
我没有在他们的网站上找到技术细节.当数据从视图传播到模型时,它或多或少清楚它是如何工作的.但是AngularJS如何在没有setter和getter的情况下跟踪模型属性的变化?
我发现有一些JavaScript观察者可以做这项工作.但Internet Explorer 6和Internet Explorer 7不支持它们.那么AngularJS如何知道我改变了例如以下内容并在视图上反映了这一变化?
myobject.myproperty="new value";
Run Code Online (Sandbox Code Playgroud) 我们有一个类似于pinterest的网站,并计划将jquery汤重构为更有条理的东西.两个最有可能的候选人是AngularJS和Backbone + Marionette.该网站是用户生成的,主要是面向消费的(典型的90/9/1规则),用户可以对帖子进行喜欢,收藏和评论.从Feed中我们打开一个灯箱,查看有关帖子的更多详细信息,包括评论,相关帖子,类似于pinterest.
我们偶尔使用骨干并熟悉这个想法,但是在样板上推迟了.我认为木偶会对此有很大的帮助,但我们愿意更加彻底地改变方向(例如Angular),如果它能长期发挥作用的话.
要求:
这些要求与我对Angular的担忧有关:
1)通过模板附加页面进行渲染时,初始页面加载是静态的是否可能/有问题.
2)为页面的不同部分提供多个数据源是有问题的 - 例如,主要帖子部分来自嵌入式json数据和来自"查看更多"的feed,而附加细节来自不同的ajax调用.
3)虽然双向绑定很酷 - 我担心在我们的情况下它可能是负面的,因为渲染的项目数量.我们需要双向绑定的元素数量相对较少.帖子如:
关注我的用例.我们可以轻松拥有数百个帖子,每个帖子有1-2个细节.双向绑定是否可以"禁用",我知道哪些字段/元素不会改变?
将视口外部的元素卸载到同一个内存是否正常/可能?这也与移动方向有关,因为内存更受关注.
AngularJS会在我们的用例中运行良好吗?有什么技巧/提示可以帮助吗?
我有以下代码与自定义指令'my-repeater':
<div ng-controller="AngularCtrl">
<div my-repeater='{{items}}'>Click here</div>
</div>?
Run Code Online (Sandbox Code Playgroud)
这是我的自定义指令:
myApp.directive('myRepeater', function($compile) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var myTemplate = "<div ng-click='updateRating({{item}});' ng-class='getRatingClass({{rating}});'>{{rating}}</div>";
var items = scope.items;
console.log('length: ' + items.length);
for (var i = 0; i < items.length; i++) {
var child = scope.$new(true);
console.log(items[i].ratings);
child.item = items[i];
child.rating = items[i].ratings;
var text = $compile(myTemplate)(child);
element.append(text);
}
}
};
Run Code Online (Sandbox Code Playgroud)
});
在我的自定义指令中没有正确地发生ng-click和ng-class绑定.任何人都可以帮我解决我在这里做错了什么吗?
这是JS小提琴. http://jsfiddle.net/JSWorld/4Yrth/5/