2014-09-01 79 views
0

我有一堆由标签和输入组成的模板/视图。我想将标签值设置到控制器型号($scope.data.details这是一个数组)。将值设置为查看模型

代码:http://plnkr.co/edit/XqtyFKKNuo8upzPuaImo?p=preview

HTML

<body ng-controller="MainCtrl"> 
    <label set-model="data.details[0]">Label 1</label> 
    <input type=text/> 
    {{ data.details[0] }} 
    <label set-model="data.details[1]">Label 2</label> 
    <input type=text/> 
    </body> 

JS

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.data = { 
    details: [] 
    }; 
}); 

app.directive('setModel', function() { 
    return { 
    restrict: 'EA', 
    link: function(scope, element, attrs) { 
     // var pair = JSON.parse(attrs) 
     scope[attrs.setModel] = element.html(); 
     console.log(scope); 
     // console.log(); 
    } 
    }; 
}) 

所以基本上:

data.details [0] = “标记1”

data.details [1] = “标记2”

...

我知道我可以在ng-init做到这一点,但它将是一个长长的名单上。我想要inline<label>本身。

但是现在它不为$scope工作基本上这显示在开发者控制台:

data: Object 
data.details[0]: "Label 1" 
data.details[1]: "Label 2" 

因此,它并没有把details为内部data对象的关键,但它创造了一个新的关键data.details[0]完全。此外,data结构可能会在以后不同,所以我不想硬编码什么。

我该如何解决这个问题?

还是有更好的方式来做到这一点?

回答

0

它不起作用这种方式,因为当你这样的关键'attrs.setModel'它采取整个字符串,这意味着它需要data.details[0]你或者解决这个与另一个JavaScript代码只是简单地使用scope指令的属性像这样

app.directive('setModel', function() { 
    return { 
    restrict: 'EA', 
    scope: {model : '=setModel'}, 
    link: function(scope, element, attrs) { 
     // var pair = JSON.parse(attrs) 
     scope.model = element.html(); 
     console.log(scope); 
    } 
    }; 
}) 

现在您的指令起飞父范围对象,而不是字符串,所以有这方面的价值变动影响父范围对象,以及...

这里工作PLUNKER ...