我一直在寻找并试图解决这个问题一段时间,但我公司做事的方式对我来说是不必要的困难。在工作中,我在面向内部客户的系统上做了很多工作,我们使用AngularJS完全用HTML编辑。我们可以在这些HTML文件中本地运行脚本,但无法访问函数中的$ scope。
我有一个如下所示的输入字段,我需要它将电话号码限制为10位数并自动删除任何非数字值。我到目前为止所做的就是这个。
在HTML文件的开头,脚本:
<script language = "javascript" type = "text/javascript">
fixPhoneNumber = function(interviewProperty) {
var cleaned = iData[interviewProperty]
cleaned = cleaned.replace(/\D/g,'');
iData[interviewProperty] = cleaned;
console.log(testing testing testing);
}
</script>
&#13;
在数据本身中,这就是我尝试调用数据的方式。如果我不够具体,我会回答任何问题,但我想我已经在这里展示了所有内容。
<button id="copyDP" class="copyButton" ng-click="copy_cust_data('phone', 'local_dir_ad_phone');" type="button">Copy Customer Phone</button><br/>
<input id="local_dir_ad_phone" type="text" class="k-textbox spellcheck" style="width:100%;" ng-change="fixPhoneNumber('local_dir_ad_phone')" ng-required="iData.site_addr_phone_same==='YES'" ng-model="iData.local_dir_ad_phone" /><br/>
<span class="error" ng-show="(iData.local_dir_ad_phone==undefined) || (iData.local_dir_ad_phone==='')">This information is required.</span>
<br/>
<ul>
<li>Is this also the best number for us to reach you at?
<ul>
<input id="contact_phone_good" type="radio" ng-model="iData.contact_phone_good" value="YES" /> <b>Yes</b><br/>
<input id="contact_phone_good" type="radio" ng-model="iData.contact_phone_good" value="NO" /> <b>No</b><br/>
<div ng-show="iData.contact_phone_good==='NO'">
<ul>
<li>What is the best number for us to reach you at? <span id="usernote">(Update Prospector Customer record with best contact number)</span></li>
</ul>
</div>
</ul>
</li>
</ul>
&#13;
我希望改变的价值是&#39; local_dir_ad_phone&#39;因为它已经在这个例子中应用了ng-change。是否有某些原因导致每次进行更改时ng-change都不会实际执行其功能?通过阅读API,我认为它应该在每次实时更改时运行它。
感谢任何帮助。谢谢!
答案 0 :(得分:0)
如果我明白你在说什么 -
您正在更改角度以外的输入值,因此无法看到更改。如果要更改角度以外的输入,则需要调用$scope.$apply()
来应用更改。由于您无权访问范围,因此可以致电$apply
上的$rootScope
来执行此操作。
angular.element('body').injector().get('$rootScope').$apply();
但这很糟糕,你应该和工作中的某个人讨论如何处理范围,因为这会导致整个应用程序的摘要。