在Angular中作为Scopes实现的模型

时间:2014-09-19 18:57:34

标签: javascript angularjs angularjs-scope

我现在遇到这种情况,我将模型实现为纯JavaScript对象。因此,您可以同步向模型询问值,并且可以订阅事件以获得有关模型更新的通知。但我不喜欢这样做。它导致了大量的代码和检查无处不在。

现在,我一直在想,利用Angular并为模型使用隔离范围不是更好吗?这样,任何对特定值感兴趣的人都可以只看模型进行更改。

示例:

function UserService($rootScope) {
  var model = $rootScope.$new(true);
  this.getModel = function() {
    return model;
  };
}

function userWidget(userService) {
  var user = userService.getModel();
  user.$watch('isLoggedIn', function(isLoggedIn) {
    //React to if the user i signed in or not...
  });
}

这是一个好主意还是一个坏主意?有什么想法吗?你是怎么解决这个的?


即使愚蠢,这是一个小型演示: http://plnkr.co/edit/JTggQ0FVYpo4saLmjLAo


谢谢!
/马丁

1 个答案:

答案 0 :(得分:0)

它没有任何问题,但在我随机做之前,我个人会有一个好处。 $ rootScope。$ new实际上有点沉重 - 一个AngularJS范围有很多额外的引用对象,如兄弟姐妹和父母。如果你有5个,谁在乎呢?但是,如果你有5000个垃圾收集器需要管理的话。如果它给你一些优势是完全合理的,但如果只是为了它自己,我就不会打扰。

你的例子中是否有理由依赖变量吊装?它通常被视为副产品或反模式,因此它可能会摒弃其他帮助维护代码的开发人员。或者你是独自飞行? :)