AngularJS - ngModel无法分配给函数

时间:2014-06-04 09:20:24

标签: javascript angularjs


我的问题很常见。我看到了许多与我有相似问题的人的不同案例,但我仍然没有答案。

[我的目标]
我想实现一个独立的指令来封装由label(span)和value(input)组成的div。这里有一些值得一提的细节:

  1. 我的指示旨在保持"输入"的价值。进入我的页面控制器得分,这是我的指令使用范围的祖先。因此,适量的"。$ parent"我可以访问我的ngModel分配所需的范围。
  2. 我的指令不知道它将用于保存用户输入的占位符的名称。这个占位符作为我的指令的HTML属性。
  3. [我的方法]
    我正在使用指令编译阶段来操纵指令的HTML(主要是为指令的模板HTML添加属性)。在预链接阶段,我想操纵指令正在使用的范围,以便将指令的占位符添加到我想要的范围,并在需要时为其分配一些默认值。 (我想我可以通过ng-init实现这一点而不是弄乱范围,但我相信这与我的问题无关。)

    [我做了什么]
    正如我上面解释的,我有一个函数(determinePlaceholderName()),它返回一个字符串,这是我想要分配给ngModel的确切值。例如:

    $parent.$parent.$parent.placeHolderName
    

    我想将该函数分配给输入的ng-model属性,假设Angular将其作为表达式进行处理,对其进行评估并生成我期望的结果。以下是我分配ng-model属性的方法:

    compile: function(cElem, cAttrs) {
        //Some non relevant code here ....
    
        $(cElem[0]).find("div input").attr("ng-model", "determinePlaceholderName()");
    }
    

    基本上我期望将其视为:

    $(cElem[0]).find("div input").attr("ng-model", "$parent.$parent.$parent.placeHolderName");
    

    [关于determinePlaceholderName()]
    我在我的指令的链接函数中定义了这个函数:

    link: function ($scope) {
    
            $scope.constructValuePlaceholderName = function() {
                //Some logic here.
    
                return result;
    }
    

    [我的问题]
    最后我的问题是什么。 Angular导致错误向我解释

    <input ng-model="myFunc()">
    

    是文档中不可分配的表达式。

    [我的问题]
    如果Angular ??

    禁止进行函数赋值,我怎样才能动态设置ngModel

    感谢您的时间!

1 个答案:

答案 0 :(得分:2)

我希望这是你正在寻找的东西:

http://plnkr.co/edit/TojgLNx3TUbmszhfs8Ui?p=preview

使用隔离范围,您可以传递模型的名称,并且指令本身不知道模型实际所在的范围或其名称,但能够按原样使用它并将其提供给ngModel。 / p>

如果您不想使用隔离范围或想要使用某个功能,那么该plunker还提供了替代方案。