angular controller-directive数据绑定 - 绑定对象内的属性

时间:2015-12-04 08:32:32

标签: angularjs data-binding directive

我的范围名称和城市中有两个属性。

如果我改变城市,它会反映在指令中。但是当我改名时,它没有反映在指令中。我故意从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>

2 个答案:

答案 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

由于需要对属性本身进行双向绑定,因此不会通知您的指令。

Example

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 你可以使用一个函数来获得价值。

Example 2

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

来解决问题