2014-01-29 26 views
0

更新:這是一個重複的Call Angular JS from legacy codeangular.js:如何從尚未「角度化」的應用程序部分更新模型?

我正在實現一個新的功能在現有的應用程序使用角度。我現在無法重寫整個應用程序,所以這意味着角度模型可能需要從應用程序的其餘部分進行更新,該應用程序直接操縱dom。

如何更新模型而不會偏離角度固有的設計模式太多(或根本)?

這是一個簡化的工作示例,但它包含控制器中的事件處理程序。也許有更好的辦法。

注意:該按鈕是虛構的。應用程序中沒有這樣的按鈕。它的簡化。

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

JS:

var testApp = angular.module('testApp', []); 
testApp.controller('audioController', function ($scope) { 

$scope.settings = {audiostop: "00:30"}; 

$('button').click(function(){ 
    $scope.loadSettings({audiostop: '23'}); 
}); 

$scope.loadSettings = function (data) { 
    $scope.$apply(function(){ 
     $scope.settings = { audiostop: data.audiostop}; 
    }); 
} 

}); 

另一個選擇是聲明函數的外部對象控制器的內部:

NAMESPACE.someobject.loadSettings = function (data) { 
    $scope.$apply(function(){ 
     $scope.settings = { audiostop: data.audiostop}; 
    }); 
} 

UPDATE:看來,我需要的是按照此處所述執行依賴關係注入: http://docs.angularjs.org/guide/di

+0

可能重複的[從遺留代碼調用Angular JS](http://stackoverflow.com/questions/10490570/call-angular-js-from-legacy-code) – CodeToad

回答

1

首先,不要使用$('button')。click。在Angular中,您可以在HTML代碼中添加單擊處理程序到按鈕,它會更乾淨。

至於更新設置 - 你可以有設置服務,特殊類將處理您的設置。因爲您可以在不同範圍內重複使用相同的服務,並且您不需要使用與數據相關的東西來污染範圍,所以擁有服務比向範圍添加功能更好。

+0

我知道這一點。謝謝。 $('button')。click在我的示例中用於顯示我想要避免的操作。該按鈕用於演示目的,實際應用程序中沒有這樣的按鈕。它代表了目前絕對不能綁定到角度的應用程序的一部分,但必須以某種方式與angular進行交互。如何配置可以讓*非角色* js代碼更改模型的服務? – CodeToad

+0

我認爲在這種情況下最簡單的方法是使用.loadSettings函數執行$ scope。$ apply並調用外部非角度代碼。 –

+0

和這個服務可以從外部非角碼調用嗎? – CodeToad

相關問題