0

detail.html ファイルにボタンがあります。

<div ng-controller="test.views.detail">
<div data-ng-repeat="item in details"  scroll>
    <button ng-click="showDetails(item)">The details</button>

detail.js ファイルで

angular.module('test')
.controller('test.views.detail', function($scope) {

    $scope.detailsClicked = false;

    $scope.showDetails = function(item){
        $scope.detailsClicked = true;
    }....

formDetail.html コード内:

<div ng-controller="test.views.detail">
{{detailsClicked}}
<div ng-if="detailsClicked">...

最初はfalsedetailsClicked に表示され、ボタンをクリックすると showDetails 関数に移動しますが、値は$scope.detailsClicked決して更新されません! なぜうまくいかないのかわからないのは簡単です:(

4

1 に答える 1

3

これは、2 つの場所で同じコントローラーを使用していて、スコープ オブジェクトが同じであると想定しているためです。マークアップで ng-controller を呼び出すたびに、新しいスコープ オブジェクトが作成されます。それらを同じデータに基づいて作成したい場合は、サービスを使用してください。

ここに例があります

app.controller('test.views.detail', function($scope, detailsClicked) {

    $scope.detailsClicked = detailsClicked;

    $scope.showDetails = function(item){
        $scope.detailsClicked.isClicked = true;
    }
});

データを保持するファクトリ/サービスを作成し、データが

app.factory('detailsClicked', function(){
  var data = {
    isClicked: false
  }

  return data;
});
于 2015-02-09T03:06:49.370 に答える