[英]angular controller-directive data binding - bind property inside object
我的作用域名称和城市有两个属性。
如果我改变城市,它会反映在指令中。 但是当我更改名称时,它并没有反映在指令中。 我有意从obj对象传递了名称,因为我试图在对象内部实现数据绑定。
有人可以帮忙如何在对象内部绑定属性,以便数据绑定仍然有效。
我认为这是必须出错的地方$ scope.obj = {prop:$ scope.name};
var myApp = angular.module('myApp',[]); myApp.directive('passObject', function() { return { restrict: 'E', scope: { obj: '=', city: "=" }, template: '<div>Hello, {{obj.prop}}! from {{city}}</div>' }; }); myApp.controller('MyCtrl', function ($scope) { $scope.name="manu"; $scope.city = "hyderabad"; $scope.obj = { prop: $scope.name }; });
<div ng-controller="MyCtrl"> <h3> Name: <input ng-model="name"/> </h3> <h3> City: <input ng-model="city"/> </h3> <pass-object obj="obj" city="city"></pass-object> </div>
我拿了你的代码,并在其中添加了一个$ scope。$ watch,以在更改$ scope.name时更新模型$ scope.obj,现在可以正常工作了。 `
var myApp = angular.module('myApp',[]);
myApp.directive('passObject', function() {
return {
restrict: 'E',
scope: { obj: '=', city: "=" },
template: '<div>Hello, {{obj.prop}}! from {{city}}</div>'
};
});
myApp.controller('MyCtrl', function ($scope) {
$scope.name="manu";
$scope.city = "hyderabad";
$scope.obj = { prop: $scope.name };
$scope.$watch(
function(){
return $scope.name;
},
function(newVal,oldVal){
$scope.obj.prop = $scope.name;
},
true
);
});
`
您的$scope.obj.prop
绑定到另一个对象(即$scope
上的字符串
由于需要对属性本身进行双向绑定,因此不会将更改通知您的指令。
范例 :
var myApp = angular.module('application',[]);
myApp.directive('passObject', function() {
return {
restrict: 'E',
scope: { name: '=', city: "=" },
template: '<div>Hello, {{name}}! from {{city}}</div>'
};
});
myApp.controller('MyCtrl', function ($scope) {
$scope.name="manu";
$scope.city = "hyderabad";
});
<div ng-controller="MyCtrl">
<h3>
Name: <input ng-model="name"/>
</h3>
<h3>
City: <input ng-model="city"/>
</h3>
<pass-object name="name" city="city"></pass-object>
</div>
如果你真的想使用你的结构,你可以使用$watch
作为Pramit昆都表现出了他的答案, 或者您可以使用函数来获取值。
var myApp = angular.module('application',[]);
myApp.directive('passObject', function() {
return {
restrict: 'E',
scope: { obj: '=', city: "=" },
template: '<div>Hello, {{obj.prop()}}! from {{city}}</div>'
};
});
myApp.controller('MyCtrl', function ($scope) {
$scope.name="manu";
$scope.city = "hyderabad";
$scope.obj = { prop: function(){ return $scope.name; } };
});
<div ng-controller="MyCtrl">
<h3>
Name: <input ng-model="name"/>
</h3>
<h3>
City: <input ng-model="city"/>
</h3>
<pass-object obj="obj" city="city"></pass-object>
</div>
我认为我们倾向于使用$scope.$watch
而不希望看到我们可以通过正确地绑定到scope
或使用function
来克服此问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.