如果没有插值标记,该属性值如何绑定?

时间:2015-02-13 19:32:43

标签: angularjs

  • MyController在其范围内点击了值为false。
  • 点击将其更改为true
  • dir指令监视单击属性的更改。
  • $ watch看到如何变化 - 或者如果没有插值标记,点击值如何变化{{clickvalue}}
  • 现在click="clickvalue"会触发$ watch,这意味着它已被绑定'到MyContoller的点击值

     <div ng-controller='MyController'>
      <button ng-click='click()'>Call function inside directive</button>
    <dir clicked="clickedvalue"></dir>  
    </div>
    

app.js

app.controller('MyController', ['$scope', function($scope) {
  $scope.clickedvalue = false;
  $scope.click = function() {
  $scope.clickedvalue = !$scope.clickedvalue;
  };
 }
]);

appDirectives = angular.module('app.directives', []);

appDirectives.directive('dir', [function() {
  return {
    restrict: 'E',
    scope:    {
    clicked:   '='
    },
      link:function(scope, element, attrs ) {
        scope.$watch('clicked', function() {
        console.log('innerFunc called');
        })
      }
    };

   }]);

2 个答案:

答案 0 :(得分:2)

如果我理解你的话,&#39; =&#39;不要求您使用{{interpolation}},&#39; @&#39;会。

此外,请注意您设置$ watch on属性,而不是在控制器的clickedvalue上。

答案 1 :(得分:1)

在角度js中{{}}表示单向绑定&amp;当您使用指令并使用=声明隔离范围时,这意味着范围变量的双向绑定。如果其中一个变量发生变化,则相对范围会更新。

scope: {
   clicked: '='
},

在您的情况下,clicked已与clickedvalue进行了映射。当clicked的值得到更新时,它还会更新clickedvalue的值,这是隔离的范围指令< / p>