2014-02-05 80 views
0

我知道在指令内部,角度与隔离范围有一些变化。指令中的角度隔离范围指的是父范围

angular.module('app', []) 
.run(function ($rootScope) { 
    $rootScope.val1 = '11'; 
    $rootScope.val2 = '22'; 
}) 
.directive('dir1', function() { 
    return { 
     restrict: 'E', 
     scope: {}, 
     template: '<a onclick="angular.element(this).scope().test()">template</a>', 
     link: function (scope, element, attrs, ctrl, transclude) { 
      scope.test = function(){console.log('test');} 
     } 
    }; 
}); 

这里也是jsFiddle:但是为什么我得到错误的范围内指令的元素我一直无法弄清楚。

onclick事件中,范围指的是$rootScope而不是指令的范围。所以它没有找到未定义的test方法。

我缺少的是为什么我从指令中的元素获取错误的作用域。我可以做angular.element($("a")[0]).scope().test(),结果是一样的。

此代码在以前的版本中工作。不知道我做错了什么。

+0

你可以看看这个http://stackoverflow.com/questions/19943935/angularjs-scope-difference-1-0-x-vs-1-2-x –

回答

0

重写你的模板......

'<a ng-click="test()">template</a>' 

...,它应该工作。 Onlick是一个执行全局状态的浏览器函数,并且与角度和范围模型无关。所以坚持像ng-click这样的角度指令,并且可以使用您在示波器上定义的方法。

这里是一个jsFiddle执行该功能,并有一个元素的引用。

+0

它应该评估到正确的范围,虽然,因为我传递了元素引用('this')。此外,我正在尝试上传文件,并且有一个隐藏的输入,我需要'onclick'。 'ng-click'不知何故无法正常工作。 – davekr

+1

在角度指令中,您将链接函数中的元素引用为参数。这就是为什么你有'元素'参数。使用onlick和全局函数是角度错误的方法。可能会阅读更多的指令文档。 docs.angularjs.org/guide/directive –

+0

好的,我知道'onclick'不是角度的方式,但这不是问题。我可以做'angular.element($(“a”)[0])。scope()。test()'并且结果将是相同的,这不是根据文档预期的行为。 – davekr