我的范围名称和城市中有两个属性。
如果我改变城市,它会反映在指令中。但是当我改名时,它没有反映在指令中。我故意从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>
答案 0 :(得分:0)
我拿了你的代码并添加了一个$ scope。$ watch来更新$ scope.obj来更新$ 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
);
});
`
答案 1 :(得分:0)
您的$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 Kundu在他的回答中显示, OR 你可以使用一个函数来获得价值。
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