为了账号安全,请及时绑定邮箱和手机立即绑定

请问能不能将a添加到angularjs的作用域范围里呢?

请问能不能将a添加到angularjs的作用域范围里呢?

猛跑小猪 2023-01-02 19:15:32

现在有个全局函数(不在angularJS的作用域中):
var a = '';
function test(para) {
a = para;

}
这个全局函数是必须的。还有一个$scope。模块还有控制器什么的在此省略...
$timeout(function () {
$scope.data = a;
},0);
现在的问题是,这个test函数何时执行是不一定的,所以a的值也不知道啥时候改变。
比如:
setTimeout(function () {
test('123');

},1000)
用$watch方法并没有效果,a的值改变的时候,$watch是检测不到的。因为a不在angularJS的作用域范围内。
我现在想a改变的时候 $scope上的data属性也一起改变,应该怎么做呢?

查看完整描述

1 回答

?
萧十郎

TA贡献1562条经验 获得超11个赞

首先来进行一个最基本的定义,由于我们需要数据绑定功能,我们将从一开始就require ngModel:
  .directive('timePicker',function(){ var today = new Date(new Date().toString()); return { require: '?ngModel', link: function($scope,$element,$attrs,ngModel){ } }}); 
  注意到我们需要涉及元素的实际实例,因此我们所有的代码基本上都位于linking函数中,我们在此完全不需要担心编译过程。我们同事也实例化了一个today变量来保存一个Date对象,以此在午夜十分更新。创建这个变量作为factory函数的一部分允许我们在多个实例之间分享一个today变量。注意,尽管这允许我们将内存的使用最小化,它也意味着如果我们的应用在半夜还依然再运行,我们的指令会开始提供不准确的结果。如果你打算将这个指令用于一个实时应用中,你最好创建另一个函数在第二天来临时更新这个值。现在,我们急需要看我们的controller函数:
  link: function($scope.$element,$attrs,ngModel){ ngModel = ngModel || { "$setViewValue" : angular.noop }} 
  你以前可能也注意过这种模式。

查看完整回答
反对 回复 2023-01-06

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信