首页 新闻 会员 周边

AngularJS的数据外部更新操作

0
悬赏园豆:10 [已解决问题] 解决于 2016-01-13 15:31

先上代码:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body style="background-repeat:no-repeat; background-image:url(images/draw.jpg);background-size:100% 100%;">
    <input type=button onclick="document.getElementById('aaa').value +='1a';"  value="设置内容">
    <input type=button onclick="document.getElementById('aaa').onclick()" value=触发事件 >
    <div ng-app="luckyDrawApp" ng-controller="luckyDrawController">
        <input type="text" id=aaa ng-change="drawInfoChanged(2)" style1="display:none;" oninput="this.onchange()" ng-model="initDrawInfo" />
        <div id="main">
        </div>
    </div>
    <script type="text/javascript">
        var app = angular.module('luckyDrawApp', []);
        app.controller('luckyDrawController', function ($scope) {
            $scope.initDrawInfo="aaa";
            $scope.drawInfoChanged = function () {
                alert(2);
            }
            $scope.aaa=function()
            {
                
            }
        });
    </script>
</body>
</html>

我想做的是:通过外部行为修改angular的数据。

初步想法是:

1、通过点击”设置内容“按钮修改 id 为 aaa 的对象的 value 属性(该目的达成)

2、希望 aaa 的value的改变,触发事件change,执行angular的行为(未达成)

3、鉴于2未能达成,定义了按钮 ”触发事件“来执行 aaa 的onchange,但报告没有这个方法。

519740105的主页 519740105 | 大侠五级 | 园豆:5810
提问于:2016-01-12 18:24
< >
分享
最佳答案
0

你这代码问题有点多哈,首先,document.getElementById('aaa').onclick()这个是不对的哈,应该用click();

另外oninput是用户输入(粘贴)等导致内容变化后触发的,直接用js修改value不会触发。

this.onchange()是什么玩意?

一般来说,你在外部修改了值,可以手动调用$scope.$apply()来进行同步。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2016-01-12 21:57

onclick、click问题都一样。

oninput是说等价于onpropertychange,但只针对于value属性,然onpropertychange没响应。

this.onchange()是触发onchange事件,在oninput里执行后,是会正确触发的。

外部修改值?怎么修改是问题啊。比如,我通过winform宿主webbrowser来修改指定input[type=text]的value,但是,在哪里去触发使用apply呢?

(这个才是我的真正需求,winform运行动态给webbrowser提供数据,如果不走angular是可以纯粹通过js来实现,现在想走angular)

519740105 | 园豆:5810 (大侠五级) | 2016-01-13 09:07

@519740105: 那你完全可以直接用angular的方式设置值,angular.element('#aaa').scope.initDrawInfo = 'xxx'这样来修改呢。

幻天芒 | 园豆:37175 (高人七级) | 2016-01-13 13:12

@幻天芒: 试下!

519740105 | 园豆:5810 (大侠五级) | 2016-01-13 13:42

@519740105: 我能说写错了一点么:angular.element('#aaa').scope().initDrawInfo = 'xxx'

幻天芒 | 园豆:37175 (高人七级) | 2016-01-13 13:43

@幻天芒: alert(angular.element('#aaa'))没反应。

519740105 | 园豆:5810 (大侠五级) | 2016-01-13 13:52

@幻天芒: 报告错误:

 

Error: [jqLite:nosel] http://errors.angularjs.org/1.4.6/jqLite/nosel

519740105 | 园豆:5810 (大侠五级) | 2016-01-13 13:54

@519740105: 好嘛,你居然要照抄:

<input type=button onclick="fun1();"  value="设置内容">
    <input type=button onclick="document.getElementById('aaa').onclick()" value=触发事件 >
    <div ng-app="luckyDrawApp" ng-controller="luckyDrawController">
        <input type="text" id=aaa ng-change="drawInfoChanged(2)" style1="display:none;" oninput="this.onchange()" ng-model="initDrawInfo" />
        <div id="main">
        </div>
    </div>
    <script type="text/javascript">
        function fun1(){
            var el = document.getElementById('aaa');
            var scope = angular.element(el).scope();
            scope.initDrawInfo = scope.initDrawInfo + 'aaaa';
            scope.$apply();
        }
        var app = angular.module('luckyDrawApp', []);
        app.controller('luckyDrawController', function ($scope) {
            $scope.initDrawInfo="aaa";
            $scope.drawInfoChanged = function () {
                alert(2);
            }
            $scope.aaa=function()
            {
                
            }
        });
    </script>
幻天芒 | 园豆:37175 (高人七级) | 2016-01-13 15:22

@幻天芒: 日太阳

519740105 | 园豆:5810 (大侠五级) | 2016-01-13 15:26

@519740105: 上~

幻天芒 | 园豆:37175 (高人七级) | 2016-01-13 15:28
其他回答(1)
0

 建议题主先去看一下关于Angularjs的文档。

了解一下Ng的语法及数据绑定方式。

Xiaoxiong | 园豆:124 (初学一级) | 2016-01-13 09:24

毛,小白啊,只是临时弄弄,又不想专职angular

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2016-01-13 09:32

@519740105: 

使用 ngKeydown或ngKeypress或ngKeyup  或使用$watch

支持(0) 反对(0) Xiaoxiong | 园豆:124 (初学一级) | 2016-01-13 09:33

@Xiaoxiong: watch应该是我要的,先关注下。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2016-01-13 09:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册