0

在回答另一个问题时,我意识到我无法通过子模型的属性将子模型传递给父指令。

鉴于此设置:

<form child-watch mod="inputModel" name="form"><!--ignore creepy directive name-->
  <input type="text" name="one" ng-model="inputModel.one">
  <input type="text" name="two" ng-model="inputModel.two"><br/>
  <input type="submit" ng-disabled="form.$pristine">
  <p>Original Model: {{original}}</p>
  <p>Isolate Scope Model: {{isolate}}</p>
</form>

我如何$watch通过其属性在指令中输入模型,并查看孩子所做的更改?如果我使用隔离范围,它只会 $watch UP 到父模型,现在不受隔离子模型的影响。

显然这不起作用,但你可以看到我要走的方向:

app.directive('childWatch', function(){
    return {
        // removing the isolate scope allows parent scope.inputModel to update
        scope:{
            mod: "="
        },
        link: function(scope, element, attrs){


            //this does not reflect change upon the parent scope.inputModel
            //if using isolate scope.  AND, I don't want to $watch a specific
            // model, because the directive needs to be reusable.  It needs to watch
            // an attribute that references the model.
            scope.$watch('inputModel', function(val){
                scope.original = val;        
            },true)


            //this only has access to the parent scope.inputModel
            scope.$watch('mod', function(i){
                scope.attribute = i;            
            }, true)
        }    
    }
})

为了使指令可重复用于不同的模型,我不能只看一个特定的模型。它需要监视引用模型的属性。我不确定这是可能的。有任何想法吗?

这是我正在搞砸的笨蛋。

4

1 回答 1

0

当使用隔离作用域时,只有那些被引用的属性对scope: { ... }视图和指令可用。在任何地方使用mod它都会起作用:

<form child-watch mod="inputModel" name="form">
  <input type="text" name="one" ng-model="mod.one">
  <input type="text" name="two" ng-model="mod.two"><br/>
  <p>Model in attribute: {{attribute}}</p>
  <p>Original model: {{mod}}</p>
</form>

普朗克

于 2013-07-10T16:35:27.870 回答