无需访问$ scope

时间:2015-09-15 00:33:08

标签: javascript jquery html angularjs

我一直在寻找并试图解决这个问题一段时间,但我公司做事的方式对我来说是不必要的困难。在工作中,我在面向内部客户的系统上做了很多工作,我们使用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;
&#13;
&#13;

在数据本身中,这就是我尝试调用数据的方式。如果我不够具体,我会回答任何问题,但我想我已经在这里展示了所有内容。

&#13;
&#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" />&nbsp;&nbsp;<b>Yes</b><br/>
			<input id="contact_phone_good" type="radio" ng-model="iData.contact_phone_good" value="NO" />&nbsp;&nbsp;<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;
&#13;
&#13;

我希望改变的价值是&#39; local_dir_ad_phone&#39;因为它已经在这个例子中应用了ng-change。是否有某些原因导致每次进行更改时ng-change都不会实际执行其功能?通过阅读API,我认为它应该在每次实时更改时运行它。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

如果我明白你在说什么 -

您正在更改角度以外的输入值,因此无法看到更改。如果要更改角度以外的输入,则需要调用$scope.$apply()来应用更改。由于您无权访问范围,因此可以致电$apply上的$rootScope来执行此操作。

angular.element('body').injector().get('$rootScope').$apply();

但这很糟糕,你应该和工作中的某个人讨论如何处理范围,因为这会导致整个应用程序的摘要。