无法在指令中访问范围变量(AngularJS)

时间:2014-06-22 23:14:26

标签: angularjs angularjs-directive

每次将值更新到控制器时,我想更改更新指令。

不幸的是,我无法从指令中访问范围值。

这是指令的代码:

myApp.directive( 'raphael', function ($compile, $document, $timeout) {
  return {
    link: function ( scope, element, attrs ) {


    var paper = new Raphael(element[0], 600, 600);
// I need it right here !

我尝试过$ watch:

scope: {variable: '='},
link: function ( scope, element, attrs ) {
  scope.$watch(variable, function(){
    console.log(variable);

但它不起作用

然后,每次在控制器中更新变量时,如何“更新”整个指令?

谢谢!

1 个答案:

答案 0 :(得分:1)

你的$ watch只是一个简单的问题,有点难以解释。 “variable”不是代码范围中的已定义变量(不是角度范围内的变量,而是JavaScript函数的实际范围)。

也许代码可以解释它比文字更好:

scope: {variable: '='},
link: function ( scope, element, attrs ) {
  scope.$watch("variable", function (variable) {
    console.log(variable);

让我们将变量重命名为更明确的变量以显示正在发生的事情。对于驻留在范围内的变量,我们将调用'foo'并通过$ watch传入foo的值,我们将调用'bar'

scope: {foo: '='},
link: function ( scope, element, attrs ) {
  scope.$watch("foo", function (bar) {
    console.log(bar);

因此$ scope.foo是一个驻留在$ scope上的变量,它由元素的foo属性双向绑定。 bar是$ watch函数传回的newValue。