經過幾個小時的沮喪搜索,我覺得我需要在這裏提交我的問題。如果這個問題之前得到了答覆,我很抱歉,但是迄今爲止我的搜索都沒有幫助。所以這是我的問題:如何更改範圍之外的AngularJS數據?
我的JavaScript代碼正在創建一個對象,它由AngularJS修改和監視。在某些事件上(如加載對象的先前設置),我希望從該範圍之外更改此對象的屬性。問題是,投入不會改變......
這裏是我多麼希望執行這些變化的例子:
HTML代碼:
<div ng-app="myApp" ng-controller="FirstCtrl">
<input type="number" ng-model="data.age">
<h1>{{data.age}}</h1>
<input type="button" value="Change to 20" ng-model="data" onclick="change()">
JavaScript代碼:
var person = {
age: 16
};
// Create module
var myApp = angular.module('myApp', []);
myApp.factory('Data', function() {
return person;
});
function FirstCtrl($scope, Data) {
$scope.data = Data;
}
function change() {
person.age = 20;
}
當我現在按下「更改爲20」按鈕時,沒有任何反應。我如何從change
函數修改人的年齡?
這完美的作品!先生非常感謝您。 每當我更改控制器外部的對象屬性時,我都必須這樣做。這不是很奇怪嗎? – gromit190
@BirgerSkogengPedersen當您使用完全以Angular風格編寫的代碼(在這種情況下,這意味着在您的作用域中使用'ng-click'並指定一個方法)時,Angular可以非常好,簡潔,但是您是對的:當您需要在其他JavaScript和Angular代碼之間進行通信時,它可能非常冗長。恐怕我沒有足夠的經驗與Angular真正評論如何處理這個問題。 –
啊,打我.scope()傑里米!至於你的問題,@BirgerSkogengPedersen,是的,這是對角度的主要投訴之一 - 一般的角度響應是,如果你使用外部代碼修改範圍,那麼你不遵守MVC,並且讓你的代碼更容易維護。我發現這在處理由項目強制執行的其他第三方庫時最常見,通常處理它們的最佳方法是將第三方功能包含在全局範圍內,或者包含在自定義指令的編譯和鏈接函數中爲了它。 – MaxPRafferty