首先我要说的是,我想要做的事情可能不是好的做法.但是,我需要做这样的事情,以便以小的增量步骤将大型Web应用程序迁移到AngularJs.
我试过了
$scope.$watch(function () { return myVar; }, function (n, old) {
alert(n + ' ' + old);
});
Run Code Online (Sandbox Code Playgroud)
其中myVar是一个全局变量(在窗口上定义)
然后从控制台更改myVar.但它只在首次设置观察者时触发.
如果我从控制器内更新myVar,它可以工作(请参阅http://jsfiddle.net/rasmusvhansen/vsDXz/3/,但如果从某些旧版javascript更新,则不行
有没有办法实现这个目标?
更新 我喜欢Anders的答案,如果遗留代码完全没有限制.但是,目前我正在研究这种似乎有用的方法,并且不包括每秒发射一次的计时器:
// In legacy code when changing stuff
$('.angular-component').each(function () {
$(this).scope().$broadcast('changed');
});
// In angular
$scope.$on('changed', function () {
$scope.reactToChange();
});
Run Code Online (Sandbox Code Playgroud)
我正在向Anders授予积分,尽管我会选择其他解决方案,因为他的解决方案正确地解决了所述的问题.
请参阅此plnkr http://plnkr.co/edit/WZHMuYY3y2wbI6UysvY6?p=preview
在包含单选按钮组的ng-repeat上使用ng-form标签时,单选按钮被链接,因此如果您在一次重复重复中选中一个单选按钮,它将在所有其他重复按钮中取消选择.这让我感到困惑,因为ng-repeat的模型与其他项目隔离.这不仅是使用ng-repeat时的问题.当具有带有隔离范围的自定义指令的多个实例时,它也会出现
<div ng-form name="myForm">
Run Code Online (Sandbox Code Playgroud)
在Plnkkr中尝试添加一些项目并检查某些项目上的单选按钮.它们应该是独立的,但它们不是.
这是Angular中的错误吗?如果不是为什么它以这种方式工作,我该如何解决它?
<form name="mainForm" ng-submit="submitAll()">
<ul>
<li ng-repeat="item in items" ng-form="subForm">
<input type="text" required name="name" ng-model="item.name"/>
<input type="radio" name="myRadio" value="r1" ng-model="item.radio" /> r1
<input type="radio" name="myRadio" value="r2" ng-model="item.radio" /> r2
<span ng-show="subForm.name.$error.required">required</span>
<button type="button" ng-disabled="subForm.$invalid" ng-click="submitOne(item)">Submit One</button>
</li>
</ul>
<button type="submit" ng-disabled="mainForm.$invalid">Submit All</button>
</form>
Run Code Online (Sandbox Code Playgroud)