GVKun编程网logo

用angularJS绑定applet参数(angularjs数据绑定)

6

在本文中,我们将带你了解用angularJS绑定applet参数在这篇文章中,我们将为您详细介绍用angularJS绑定applet参数的方方面面,并解答angularjs数据绑定常见的疑惑,同时我们

在本文中,我们将带你了解用angularJS绑定applet参数在这篇文章中,我们将为您详细介绍用angularJS绑定applet参数的方方面面,并解答angularjs数据绑定常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的angularjs $apply 数据绑定、AngularJS _AngularJs 双向绑定原理(数据绑定机制)、angularjs – Angular 1.0.8 $资源,具有多个可选的get参数、angularjs – Angular bootstrap typeahead不能使用Angular 1.3.0

本文目录一览:

用angularJS绑定applet参数(angularjs数据绑定)

用angularJS绑定applet参数(angularjs数据绑定)

我需要将动态参数传递给applet。

这是我的控制器:

''use strict'';    angular.module(''jworkApp'')      .controller(''AppletCtrl'',[''$scope'', function (scope) {              scope.base64 = "abcd";}]);

这是我的观点,参数base64在控制器中定义为“ abcd”

<p>{{base64}}</p><APPLET>  <PARAM name="text" value={{base64}} /></APPLET>

当我运行页面时,我在p标签中看到字符串’abcd’,但是applet参数的值只是“ {{base64}}”。

我该如何解决?

答案1

小编典典

我解决了传递整个applet声明的问题。这样,它可以正常工作。

控制器:

angular.module(''jworkApp'')  .controller(''AppletCtrl'',[''$scope'', ''$sce'', function ($scope, $sce) {            $scope.b64 = ''AAAA'';            $scope.applet =                 "<APPLET>"+                "<PARAM name=\"testo\" VALUE=\""+$scope.b64+"\" />"+                "</APPLET>";             $scope.getAppletCode = function() {                  return $sce.trustAsHtml($scope.applet);             };  }]);

视图:

<div ng-bind-html="getAppletCode()"></div>

angularjs $apply 数据绑定

angularjs $apply 数据绑定


js代码都是顺序执行的,如果遇到异步执行,并且带有返回值,angularjs是怎么处理的呢?下面以实例详细说明一下$apply的功能。

1,angularjs数据绑定了,但是没有在html中显示出来

app.controller(''PhoneDetailCtrl'', [''$scope'', ''$routeParams'',  
  function($scope, $routeParams) {  
     $scope.user = '''';  
     $scope.test = function() {  
         setTimeout(function () {  
             $scope.user = "good";  
         }, 2000);  
     }  
  
     $scope.test1 = function() {  
          $scope.user = ''tank'';  
     }  
  
     $scope.test1();  
     $scope.test();  
  
     console.log($scope);  
  }  
]);

上例解释:

正常理解是:在html显示tank,2秒后,会变成good。

实际情况是:html显示tank,2秒后,不会成good。

我开始以为是setTimeout里面的程序并没有执行,但是我用console.log($scope);发现$scope.user值改变了,是good,但是为什么没有在html里面体现出来呢。

怎么样才能让html中的{{user}}自动变呢。

$scope.test = function() {  
    setTimeout(function () {  
        $scope.$apply(function () {  
            $scope.user = "good";  
        });  
    }, 2000);  
}

这样就可以了,在html显示tank,2秒后,会变成good。

AngularJS _AngularJs 双向绑定原理(数据绑定机制)

AngularJS _AngularJs 双向绑定原理(数据绑定机制)

原文地址:

https://www.jianshu.com/p/ad0c48810bf1

 

AngularJsscope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view(html) 上时 AngularJs 就会往 $watch 队列里插入一条 $watch,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时,$digest 循环就会触发。$digest 会遍历所有的 $watch。从而更新DOM

$watch

这有点类似于我们的观察者模式,在当前作用域$scope下,我们创建一个监控器$watchers和一个监听器$watch$watchers 负责管理所有的 $watch,当我们每次绑定到UI上的时候就自动创建一个$watch,并把它放到 $watchers

controller.js

app.controller('MainCtrl', function($scope) {
  • $scope.Hello = "Hello";
  • $scope.world = "World";
  • });

    index.html

    1. <div>{{Hello}}</div>

    这里,即便我们在$scope上添加了两个变量,但是只有一个绑定在了UI上,因此在这里只生成了一个$watch

    $digest

    当浏览器接收到可以被angular context处理的事件时,$digest循环就会触发。$digest将会遍历我们的$watch,如果$watch没有变化,这个循环检测就将停止,如果有至少一个更新过,这个循环就会再次触发,直到所有的$watch都没有变化。这样就能够保证每个model都已经不会再变化。这就是脏检查(Dirty Checking)机制

    controller.js

    1. app.controller('MainCtrl', function() {
    2. $scope.name = "Foo";
    3. $scope.changeFoo = function() {
    4. $scope.name = "Bar";
    5. }
    6. });

    index.js

    1. <div>{{ name }}</div>
    2. <button ng-click="changeFoo()">Change the name</button>
    • 当我们按下按钮
    • 浏览器接收到一个事件,进入angular context
    • $digest循环开始执行,查询每个$watch是否变化。
    • 由于监视$scope.name$watch报告了变化,它会强制再执行一次$digest循环。
    • 新的$digest循环没有检测到变化。
    • 更新与$scope.name新值相应部分的DOM

    $apply

    $apply 我们可以直接理解为刷新UI。如果当事件触发时,你调用$apply,它会进入angular context,如果没有调用就不会进入,之后的$digest检测机制就不会触发

    1. app.directive('clickable', function() {
    2. return {
    3. restrict: "E",
    4. scope: {
    5. foo: '='
    6. },
    7. template: '<ul><li>{{foo}}</li></ul>',
    8. link: function(scope, element, attrs) {
    9. element.bind('click', function() {
    10. scope.foo++;
    11. console.log(scope.foo);
    12. });
    13. }
    14. }
    15. });

    当我们调用clickable指令的时候,我们可以看到foo的值增加了,但是界面上显示的内容并没有改变。$digest脏检测机制没有触发,检测foo$watch就没有执行。

    $apply()方法的两种形式

    1) 无参

    $scope.$apply();

     

    1. element.bind('click', function() {
    2. scope.foo++;
    3. //if error
    4. scope.$apply();
    5. });

    当我们使用这种形式的时候,如果在scope.$apply之前程序发生异常,那scope.$apply没有执行,界面就不会更新

    2) 有参

    1. $scope.$apply(function(){
    2. ...
    3. })

     

    1. element.bind('click', function() {
    2. scope.$apply(function() {
    3. scope.foo++;
    4. });
    5. })

    如果用这种形式,即使后面的发生异常,数据还是会更新。

    在 AngularJS 中使用 $watch

    常用的使用方式:

    1. $scope.name = 'Hello';
    2. $scope.$watch('name', function(newValue, oldValue) {
    3. if (newValue === oldValue) { return; }
    4. $scope.updated++;
    5. });

    传入到$watch()中的第二个参数是一个回调函数,该函数在name的值发生变化的时候会被调用。

    如果要监听的是一个对象,那还需要第三个参数:

    1. $scope.data.name = 'Hello';
    2. $scope.$watch('data', function(newValue, oldValue) {
    3. if (newValue === oldValue) { return; }
    4. $scope.updated++;
    5. }, true);

    表示比较的是对象的值而不是引用,如果不加第三个参数true,在 data.name 变化时,不会触发相应操作,因为引用的是同一引用。

    总结

    1) 只有在$scope变量绑定到页面上,才会创建 $watch

    2) $apply决定事件是否可以进入angular context

    3) $digest 循环检查model时最少两次,最多10次(多于10次抛出异常,防止无限检查)

    4) AngularJs自带的指令已经实现了$apply,所以不需要我们额外的编写

    5) 在自定义指令时,建议使用带function参数的$apply



    作者:Nickyzhang
    链接:https://www.jianshu.com/p/ad0c48810bf1
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    angularjs – Angular 1.0.8 $资源,具有多个可选的get参数

    angularjs – Angular 1.0.8 $资源,具有多个可选的get参数

    我的学生ulr看起来像这样:
    var Student = $resource('/app/student/:studentid:courseId',{studentid:'@id',courseId:'@cid'}
    );

    当我没有参数调用它,我想要url是/ app / student /(工作)

    var names=Student.query(
      function(){
          deferred.resolve(names);
      }
    );

    当我用studentid打电话给我想要的URL / app / student /?id = 88(作品)

    Student.get({"id":id},function(data){
              deferred.resolve(data);
          }
        );

    当我打电话只有我想要的URL / app / student /?courseid = 99(不)

    Student.query({courseId:cId},function(data){
              deferred.resolve(data);
          }
        );

    相反,我得到:/ app / student / 6682831673622528

    当我打电话给学生和课程编号我想:/ app / student /?id = 1& courseid = 2
    相反,我得到/ app / student / 12

    尝试这样的URL:/ app / student /:studentid&:courseid给我/ app / student / 1& 2

    不知怎的,只给学生作品,但是课程或者两者都不能像我想要的那样工作.不知道我会如何期待,因为关于多个参数的文档中没有任何内容作为查询字符串(在/ app / student / studentid / 1 / courseid / 2上扩展url),但是由于这是一个xhr请求要求/ app / student /附加的GET参数为?one = val& two = val

    有没有办法做到这一点?

    如果您需要将参数映射到查询参数,而不是路径参数,则不应将参数名称放入路径中.例如.学生资源应该如下所示:
    var Student = $resource('/app/student/',{}
    );

    然后像这样的调用将无任何问题:

    Student.get({id:12,courseId:55});//calls /app/student/?id=12&courseId=55
     Student.get({id:12});//calls /app/student/?id=12
     Student.get({courseId:55});//calls /app/student/?courseId=55

    其他情况也会奏效.只需不要将路径参数与查询参数混淆.

    angularjs – Angular bootstrap typeahead不能使用Angular 1.3.0

    angularjs – Angular bootstrap typeahead不能使用Angular 1.3.0

    我创建了一个小的plunker来表明这不起作用.谁能帮助我如何使用1.3.0 angularJS /提供备用解决方案的typeahead.我们正在使用angular-bootstrap 0.11.0和最新版本的bootstrap.我们的代码严重依赖于1.3.0中引入的ng-messages

    Here is the plunker link

    你可以清楚地看到,点击事件,向上箭头和向下箭头不起作用.添加一些代码让SO开心.

    总结

    以上是小编为你收集整理的angularjs – Angular bootstrap typeahead不能使用Angular 1.3.0全部内容。

    如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

    我们今天的关于用angularJS绑定applet参数angularjs数据绑定的分享就到这里,谢谢您的阅读,如果想了解更多关于angularjs $apply 数据绑定、AngularJS _AngularJs 双向绑定原理(数据绑定机制)、angularjs – Angular 1.0.8 $资源,具有多个可选的get参数、angularjs – Angular bootstrap typeahead不能使用Angular 1.3.0的相关信息,可以在本站进行搜索。

    本文标签: