2014-02-20 34 views
0

角控制器我已經JS對象,如:如何結合現有對象

var Test = function() { 

    var x; 
    var y; 

    this.start = function() { 
    //some action 
    if (x > y) { 
     x = x* 10; // now update angular $scope.x 
    } 
    }; 

    this.end = function() { 
    //other action 
    }; 


    function anotherAction() { 

    }; 
}; 

而且我有一個角控制器

testModule.controller('TestCtrl', function ($scope, $location) { 
    var test = new Test(); 

    //$scope.x = value from test 
} 

我想與Test實體結合的角度控制器。例如。我想趕上,當test.end()將被調用,並獲得返回值或從test.end()角度傳遞值。可能嗎?

更新:

x和y可以在test.start被更新()方法,我想更新x或y之後通過新的值(x或y),以角控制器。 (聽x或y的角度聽模型的變化)

我怎樣才能捕捉事件的角?

對不起,我爲新手提問。

+1

將您的對象添加到自定義服務並將服務注入控制器。該服務將爲你調用'new'並保持一個singleton狀態[看這裏](http://code.angularjs.org/1.2.13/docs/api/AUTO.$provide#methods_service) –

+0

@DavidChase,更新的問題。這仍然是正確的方式? – havenchyk

+0

你想包裝在一個服務中,你可以從該服務廣播或發送事件到你的控制器...等有意義 –

回答

0

製作試驗工廠或服務暴露你的X/Y字段:

var Test = function() { 

    var values = { 
      x: 0, 
      y: 0 
     }; 

     return { 
      values: values, 
      start: function() { 
       values.x++; 
       values.y++; 
      }, 
      end: function() { } 
     } 
} 

angular.service('Test', Test); 

現在,在你的範圍,你可以說:

angular.controller('TestController', ['$scope', 'TestSvc', function(
     $scope, testSvc) { 
    $scope.test = testSvc.values; 
}); 

任何地方在您的應用程序使用TestSvc會能夠通過TestSvc.values訪問x/y的更新值

(編輯:忘了控制器中的.values參考) (編輯2:改變了Test的主體f因爲它最初不能正常運行)

+0

很酷,謝謝,我會試試看。 – havenchyk

+0

你也可以回答,如何在角度控制器中捕捉文檔事件? $ on('eventName',function(){})對我來說不起作用 – havenchyk

+0

在這裏沒有空間來給出完整的答案,但文檔事件是一個DOM關注點,所以你不應該這樣做控制器...我可能會考慮將捕獲到一個指令,然後使用該指令來通知containig控制器 – maf748