AngularJS在没有隔离作用域的情况下设置绑定

AngularJS在没有隔离作用域的情况下设置绑定,angularjs,angularjs-scope,Angularjs,Angularjs Scope,这是实现只读绑定到父指令作用域中附加的对象的方法吗 我真的需要child指令来接收更改通知,如果父指令更改为“$scope.thing” 基本上,我现在正在投票。我想要一个回调方法 angular.module('plunker', []) .directive('myParent', function($compile) { return { controller: function($scope, $log) { $scope.thing = { awesome: '

这是实现只读绑定到父指令作用域中附加的对象的方法吗

我真的需要child指令来接收更改通知,如果父指令更改为“$scope.thing”

基本上,我现在正在投票。我想要一个回调方法

angular.module('plunker', [])
.directive('myParent', function($compile) {
  return {
    controller: function($scope, $log) {
      $scope.thing = { awesome: 'sucky' };
      var count = 0;
      setInterval(function() { $scope.thing = { awesome: 'cool'+count++ }}, 2000); 
    },
    template: '<div><div my-child entity="thing"></div></div>'
  };
})
.directive('myChild', function($parse, $log) {
  return {
    controller: function($scope) {
    },
    link: function(scope, element, attrs) {
      var expression = attrs['entity'];
      scope.onetime = $parse(expression)(scope);
      $log.log('onetime');
      $log.log(scope.onetime);

      setInterval(function () {
          if (expression) {
              scope.intervaled = $parse(expression)(scope);
              scope.$apply();
              $log.log('interval');
              $log.log(scope.intervaled);
          }
      }, 2000);
    }, 
    template: '<span>{{onetime}}</span>-<span>{{intervaled}}</span>'
  };
})
angular.module('plunker',[])
.directive('myParent',函数($compile){
返回{
控制器:函数($scope,$log){
$scope.thing={awesome:'sucky'};
var计数=0;
setInterval(function(){$scope.thing={awesome:'cool'+count++},2000);
},
模板:“”
};
})
.directive('myChild',函数($parse,$log){
返回{
控制器:功能($scope){
},
链接:函数(范围、元素、属性){
var表达式=attrs['entity'];
scope.onetime=$parse(表达式)(scope);
$log.log('onetime');
$log.log(scope.onetime);
setInterval(函数(){
if(表达式){
scope.intervaled=$parse(表达式)(scope);
作用域:$apply();
$log.log('interval');
$log.log(范围内);
}
}, 2000);
}, 
模板:“{onetime}}-{{intervaled}”
};
})
以及强制性plnkr:


不使用池,只需利用AngularJS$digest循环并观察属性中的更改:

  var entityValue = $parse(attrs.entity);

  scope.$watch(entityValue, function(newValue, oldValue){
     scope.intervaled = newValue;
  });
$scope.$apply
应始终在您知道自己在AngularJS世界之外的一端调用-在本例中,在发送端:

    setInterval(function() { 
      $scope.$apply(function(){
        $scope.thing = { awesome: 'cool'+count++ }  
      })
    }, 2000)
最后是工作过程:


请注意,使用不隔离作用域的模板的指令是在玩火,因为您的指令可能很容易覆盖应用程序其他部分所需的数据(
intervaled
).

不使用池,只需利用AngularJS$digest循环并观察属性中的更改:

  var entityValue = $parse(attrs.entity);

  scope.$watch(entityValue, function(newValue, oldValue){
     scope.intervaled = newValue;
  });
$scope.$apply
应始终在您知道自己在AngularJS世界之外的一端调用-在本例中,在发送端:

    setInterval(function() { 
      $scope.$apply(function(){
        $scope.thing = { awesome: 'cool'+count++ }  
      })
    }, 2000)
最后是工作过程:


请注意,使用不隔离作用域的模板的指令是在玩火,因为您的指令可能很容易覆盖应用程序其他部分所需的数据(
intervaled
).

不使用池,只需利用AngularJS$digest循环并观察属性中的更改:

  var entityValue = $parse(attrs.entity);

  scope.$watch(entityValue, function(newValue, oldValue){
     scope.intervaled = newValue;
  });
$scope.$apply
应始终在您知道自己在AngularJS世界之外的一端调用-在本例中,在发送端:

    setInterval(function() { 
      $scope.$apply(function(){
        $scope.thing = { awesome: 'cool'+count++ }  
      })
    }, 2000)
最后是工作过程:


请注意,使用不隔离作用域的模板的指令是在玩火,因为您的指令可能很容易覆盖应用程序其他部分所需的数据(
intervaled
).

不使用池,只需利用AngularJS$digest循环并观察属性中的更改:

  var entityValue = $parse(attrs.entity);

  scope.$watch(entityValue, function(newValue, oldValue){
     scope.intervaled = newValue;
  });
$scope.$apply
应始终在您知道自己在AngularJS世界之外的一端调用-在本例中,在发送端:

    setInterval(function() { 
      $scope.$apply(function(){
        $scope.thing = { awesome: 'cool'+count++ }  
      })
    }, 2000)
最后是工作过程:


请注意,使用不隔离作用域的模板的指令是在玩火,因为您的指令可能很容易覆盖应用程序其他部分所需的数据(
intervaled
)。所以一般来说,如果我的指令有一个模板,我应该使用隔离作用域?是的,我会说一个好的经验法则是:如果你有一个读取指令特定模型的模板(这意味着你在一个作用域上有指令特定的变量),你应该隔离一个作用域,以避免潜在的冲突。谢谢,特别感谢您提供有关隔离范围的提示。所以一般来说,如果我的指令有一个模板,我应该使用隔离作用域?是的,我会说一个好的经验法则是:如果你有一个读取指令特定模型的模板(这意味着你在一个作用域上有指令特定的变量),你应该隔离一个作用域,以避免潜在的冲突。谢谢,特别感谢您提供有关隔离范围的提示。所以一般来说,如果我的指令有一个模板,我应该使用隔离作用域?是的,我会说一个好的经验法则是:如果你有一个读取指令特定模型的模板(这意味着你在一个作用域上有指令特定的变量),你应该隔离一个作用域,以避免潜在的冲突。谢谢,特别感谢您提供有关隔离范围的提示。所以一般来说,如果我的指令有一个模板,我应该使用隔离作用域?是的,我会说一个好的经验法则是:如果你有一个读取指令特定模型的模板(这意味着你在一个作用域上有指令特定的变量),你应该隔离一个作用域,以避免潜在的冲突。