gpt4 book ai didi

javascript - 从外部调用作用域函数不会触发监视

转载 作者:行者123 更新时间:2023-12-02 16:24:09 25 4
gpt4 key购买 nike

简单的例子:

  <body ng-app="testApp">
<form name="myForm" id='CtrlHost' ng-controller="Ctrl">
<input type="Button" value="Change Inside Angular" ng-click="ChangeIt()" />
<input type="Button" value="Change Outside Angular" onclick="OutsideAngularChange()" />
</form>
</body>

angular.module('testApp', [])
.controller('Ctrl', function($scope, MyService) {
var NewPropValue = 1;
$scope.ChangeIt = function () {
alert("scope.changeit called");
NewPropValue++;
MyService.SetMyProp(NewPropValue);
};
$scope.$watch(MyService.GetMyProp, function (newValue) {
alert("NewValue from Watch = " + newValue);
});
}).service('MyService', function () {
var myProp;

this.GetMyProp = function () {
return MyProp;
};

this.SetMyProp = function (newProp) {
MyProp = newProp;
};
});

function OutsideAngularChange() {
alert("OutsideAngularChange called")
angular.element(document.getElementById('CtrlHost')).scope().ChangeIt();
}

http://jsfiddle.net/jonnyknowsbest/4umxanpu/

点击“Change Inside Angular”按钮,示波器监视就会被触发。点击“更改外部 Angular ”按钮,示波器监视不会被触发。

两个按钮都调用相同范围的方法来更新服务属性。

为什么一个有效,另一个无效?

最佳答案

更改值后尝试使用 $scope.$apply()。

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$apply

关于javascript - 从外部调用作用域函数不会触发监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com