2013-10-31 49 views
0

我寫一個有點複雜angularjs應用。我發現是我的主控制器模型確實應該由幾個對象是自包含將由其它控制器使用的功能的。這通常不是問題,但這些對象需要能夠告訴當屬性已更新。我想我會通過$範圍到模型對象,並可以調用$手錶功能如此:

function MyCtrl($scope){ 
    $scope.myModel = new MyModel($scope); 
    //Do Ctrl Stuff 
} 

function MyModel($scope){ 
    $scope.X = 2; 
    $scope.Y = 3; 
    $scope.$watch('Y', function(oldVal, newVal){ 
     //do something important 
    }); 
} 

當MyCtrl改變$ scope.myModel.Y的價值,沒有任何反應。事實上,它似乎爲MyModel需要格式化它像手錶手錶$(「myModel.Y」 ......這不是抽象的,因爲它需要知道如何MyCtrl有它分配給$範圍非常有用的。我想是想抽象邏輯爲可用於將常用的功能,但谷歌搜索似乎並沒有在這裏幫我,爲MyModel實際上是一個體面的大小模塊,我想在其他使用時要儘量保持DRY控制器。什麼是最好的做法在這裏?

謝謝!

回答

1

你的功能爲MyModel應該返回$範圍,如果你想從MyCtrl使用它。

function MyCtrl($scope){ 
    $scope.myModel = new MyModel($scope); 
    //Do Ctrl Stuff 
} 

function MyModel($scope){ 
    scope = $scope.$new(); //Creates a new isolated scope 
    scope.X = 2; 
    scope.Y = 3; 
    scope.$watch('Y', function(oldVal, newVal){ 
     console.log(oldVal, newVal); 
    }); 
    return scope; 
} 

看到這個Plunker

+0

Perfect Franquis。這正是我所期待的。非常感謝。 – enantiomer2000

1

你應該使用服務的這種數據共享,你在做什麼,會得到遠比更復雜需要和角度的框架已經有了,你需要

共享工具然後您可以在任何需要它的控制器,指令或其他服務中注入該服務作爲依賴項。

var app=angular.module('myApp',[]); 

app.factory('myDataService',function(){ 
    return { 
    data: {x:2,y:3} ; 
    updateData:function(x,y){ 
      this.data.x=x; 
      this.data.y=y; 
    } 
    } 
}); 

app.controller('myCtrl',function($scope, myDataService){ 
    $scope.data=myDataService.data; 
    $scope.onMyButtonClick=function(x, y){ 
     myDataService.upDateData(x,y); 
    }) 
}); 

app.controller('myOtherCtrl',function($scope, myDataService){ 
    /* when updates made in other controller will automatically be reflected here*/ 
    $scope.data=myDataService.data 
});