如果我有这个 Controller :
myApp.controller('ctrl', function ($scope) {
$scope.obj = {
name: "John",
lastname: "Preston"
}
});
使用这个html
<body ng-controller="ctrl">
<div my-attr="obj" my-directive>Click here</div>
<pre>{{obj | json}}</pre>
</body>
我想使用 $parse 更改指令中lastname
的值。我知道如果我像这样传递对象属性:
<div my-attr="obj.lastname" my-directive>Click here</div>
该指令的作用是:
myApp.directive('myDirective', function( $parse, $log ) {
return function( scope, el, attrs ) {
var model = $parse( attrs.myAttr );
$log.log( model(scope) );
el.bind('click', function() {
model.assign(scope, "Watts");
scope.$apply();
$log.log( model(scope) ); // Now here obj.lastname is Watts
})
}
});
但是指令中的代码怎么可能不传递属性呢?我的意思是,像这样: my-attr="obj"
最佳答案
好吧,我找到了两种方法来实现这个:
1) $parse(我最喜欢的)
我刚刚使用: $parse( 'obj.lastname' );
来获取它:
html:
<div my-directive>Click here</div>
指令:
myApp.directive('myDirective', function( $parse, $log ) {
return function( scope, el, attrs ) {
var model = $parse( 'obj.lastname' );
$log.log( model(scope) );
el.bind('click', function() {
model.assign(scope, "Watts");
scope.$apply();
$log.log( model(scope) ); // Now here obj.lastname is Watts
})
}
});
2) $eval(有趣)
html:
<div my-attr="obj" my-directive>Click here</div>
指令:
myApp.directive('myDirective', function( $parse, $log ) {
return function( scope, el, attrs ) {
var model = scope.$eval(attrs.myAttr);
$log.log( model );
el.bind('click', function() {
model.lastname = 'Watts';
scope.$apply();
$log.log( model ); // Now here obj.lastname is Watts
})
}
});
还有其他想法吗?
关于javascript - 如何 '$parse' 指令中的作用域对象传递整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912091/