经过几个小时的沮丧搜索,我觉得我需要在这里提交我的问题。如果这个问题之前得到了答复,我很抱歉,但是迄今为止我的搜索都没有帮助。所以这是我的问题:如何更改范围之外的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