angularjs - 当对象更新时,绑定(bind)到对象的属性不会更新

标签 angularjs angularjs-directive angularjs-scope

我有几个与代表产品的对象的绑定(bind)。但是,每当我更新底层产品对象时,我的绑定(bind)都不会更新。我怀疑发生这种情况是因为 Angular 仍在监视旧对象的属性。我怎样才能让 Angular 按照我的预期运行?

模板

<div>
    <span>{{ selectedProduct.name }}</span>
    <ul>
        <li 
            ng-click="selectedProduct = product;"
            ng-repeat="product in products"
        ><img src="{{product.imgUrl}}"></li>
    </ul>
</div>

指令

module.directive('productList', function () {
    restrict: 'E',
    replace: 'true',
    scope: {
        products: '=',
        selectedProduct: '='
    },
    controller: function ($scope) {
        $scope.selectedProduct = products[0];
    }
});

编辑以澄清用法 我的指令是这样消耗的

模板

<div ng-controller="arbitraryController">
    <product-list products="products" selected-product="selectedProduct"></product-list>
</div>

Controller

module.controller('arbitraryController', function ($scope) {
    $scope.products = [{
        name:'boots', 
        imgUrl:'boots.jpg'
    },{
        name:'fluffy bunnies', 
        imgUrl:'bunnies.jpg'
    }];
});

最佳答案

在作用域之间传递对象时要记住的是:

"Whenever you have ng-model there's gotta be a dot in there somewhere. If you don't have a dot, you're doing it wrong."

引用来自此视频angular JS - best practice (29:19),这里有很好的解释:

我创建了一个plunker ,展示如何做到这一点。我们将把所有相关的东西放入一个名为 model 的模型实例中。 :

.controller('arbitraryController', ['$scope',
    function($scope) {
      var products = [
        {name: 'boots', imgUrl: 'boots.jpg'},
        {name: 'fluffy bunnies', imgUrl: 'bunnies.jpg'}
      ];

      $scope.model = {
        products : products,
        selectedProduct : products[0],
      };
    }
  ])

并将其传递给指令:<product-list product-model="model"></product-list> ,代码将更新为:

.directive('productList', function() {
    return {
      restrict: 'E',
      replace: 'true',
      templateUrl: 'products.tpl.html',
      scope: {
        model: '=productModel',
      },
    }
})

如何协同工作观察here .

关于angularjs - 当对象更新时,绑定(bind)到对象的属性不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23872075/

相关文章:

angularjs - 如何让 ng-include 指令与内容交付网络一起使用?

AngularJS - 从前端过滤减号

angularjs - 在 Jasmine 测试中获取自定义指令的 Controller 范围

javascript - ng-click 指令不调用 Controller 函数

javascript - Angular js,从服务传递对象

angularjs - 快速单击 Bootstrap 删除图标两次会导致第一个删除周期中断

javascript - Angular 中的货币格式化指令

javascript - Watch 在另一个自定义元素指令中使用的自定义属性指令中不起作用

javascript - ng-click 在 D3 生成的 svg 中不起作用

javascript - 如何导入模块并以 Angular 显示在 View 上?