为什么指令中的范围变量未定义?

时间:2016-04-21 21:08:04

标签: angularjs

我有以下父母和子女(http://jsfiddle.net/j1ee5zss/2/):

<div parent parent-model="my-model">
  <div child>Child</div>
</div>

在child指令中,我试图获得父模型,例如“my-model”:

app.directive("parent", parent);

function parent() {

  var parent = {
    controller: ["$scope", controller],
    replace: false,      
    restrict: "A",
    scope: {
      model: "="
    }    
  };

  return parent;

  function controller($scope) { 
    this.getModel = function () {
      return $scope.model;
    }    
  }   
}  

app.directive("child", child);

function child() {
  var child = {
    link: link,
    replace: false,
    require: "^parent",
    restrict: "A"
  };
  return child;
  function link(scope, element, attributes, controller) {    
    var model = controller.getModel();
    console.log(model);    
  }  
}

为什么在编写console.log(model)时模型未定义?

3 个答案:

答案 0 :(得分:0)

也许您应该观察parentModel,而不是模型?

      scope: {
           parentModel: "="
       } 

或者只使用属性模型。

答案 1 :(得分:0)

如果要获取字符串my-model,则需要将其括在引号中。

<div parent parent-model="'my-model'">
  <div child>Child</div>
</div>

JS

scope: {
    model: "=parentModel"
}

使用双向绑定=将属性绑定到范围时,该属性将被计算为Angular表达式,而不是文字。

答案 2 :(得分:0)

您没有正确地进行双向绑定。您正在创建隔离范围命名'model'$ scope变量,因此这是获取父属性值的方法,例如父模型。

scope: { model: "=parentModel" }

如果你的控制器中有我的模型值。