2016-07-11 30 views
0

私は3つのhtmlページを持っています。 index.html、search-movie.html、およびresult-movie htmlを参照してください。私は別のコントローラからコントローラの機能を呼び出す方法は?

ui-routerでページをリダイレクトしています。

私はhtmlページ内のテキストとボタンがあります。

検索movie.htmlコードは以下の通りです。

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>Search Movie</title> 
</head> 
<body> 
    <div class="bs-component" ng-controller="searchMovieController"> 
     <form class="well form-search"> 
      <fieldset> 
       <legend>Search Movie</legend> 
      </fieldset> 
      <div> 
       <label class="control-label" for="movie-name">Movie Name : </label> 
       <input type="text" id="movie-name" class="input-small" style="margin-left: 10px;" placeholder="Please write movie name" ng-model="searchMovie"> 

       <a ui-sref="/result-movie" class="btn-sm btn-primary" style="margin-left: 10px;" ng-click="searchMovieF()"> 
        <span class="glyphicon glyphicon-search"> Search</span> 
       </a> 
      </div> 
     </form> 
     <ul> 
      <li> <h2>Title: {{name}}</h2></li> 
      <li><h3>Release Date: {{release}}</h3></li> 
      <li><h3>Length: {{length}}</h3></li> 
      <li><h3>Description: {{description}}</h3></li> 
      <li><h3>IMDb Rating: {{rating}}</h3></li> 
     </ul> 
    </div>    
</body> 
</html> 

、これは次のように私の結果-movie.htmlコードです:

(function (angular) { 
    'use strict'; 

    var app = angular.module('adphorusWork', ['ui.router']); 

    app.config(function ($stateProvider, $urlRouterProvider) { 
     $stateProvider 
     .state('/', { 
      url: '/', 
      templateUrl: 'welcome.html' 
     }) 
     .state('/search-movie', { 
       url: '/search-movie', 
       templateUrl: 'search-movie.html', 
       controller: 'searchMovieController' 
     }) 
     .state('/result-movie', { 
       url: '/result-movie', 
       templateUrl: 'result-movie.html', 
       controller: 'resultMovieController' 
     }); 
     $urlRouterProvider.otherwise('/search-movie'); 
    }); 

    // I have no idea hoe can I use ? (with function) 
    //app.factory('omdbService', function() { 
    // return { 
    //  omdbData: { 

    //  } 
    // }; 
    //}); 

    app.controller('searchMovieController', function ($scope, $http) { 
     $scope.searchMovieF = function() { 
      if ($scope.searchMovie.length > 0) { 
       $scope.api = 'http://www.omdbapi.com/?t=' + $scope.searchMovie + '&y=&plot=short&r=json'; 
       $http.get($scope.api) 
       .success(function (data) { 
        $("#movie-name").autocomplete({ 
         source: data.Title 
        }); 
        if ((data.Error != "Movie not found!") && (data.Error != "Must provide more than one character.")) { 
         $scope.name = data.Title; 
         $scope.release = data.Released; 
         $scope.length = data.Runtime; 
         $scope.description = data.Plot; 
         $scope.rating = data.imdbRating; 
        } 
        else { 
         alert("Movie not found !") 
        } 
       }); 
      } else { 
       alert("Please write somethings !") 
      } 
     } 
    }); 
    app.controller('resultMovieController', function ($scope) { 
    }); 
})(angular); 

私はこれをしたい:次のように私app.jsを追加

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Result Movie</title> 
</head> 
<body> 
    <div id="forResult" class="bs-component" ng-controller="resultMovieController"> 
     <form class="well form-search" id="formResult"> 
      <fieldset> 
       <legend>Result for Search Movie</legend> 
      </fieldset> 
     </form> 
     <ul> 
      <li> <h2>Title: {{name}}</h2></li> 
      <li><h3>Release Date: {{release}}</h3></li> 
      <li><h3>Length: {{length}}</h3></li> 
      <li><h3>Description:{{description}}</h3></li> 
      <li><h3>IMDb Rating: {{rating}}</h3></li> 
     </ul> 
     <a ui-sref="/search-movie" class="btn-sm btn-primary" style="margin-left:20px;"> 
      <span class="glyphicon glyphicon-circle-arrow-left">Back to Search Page</span> 
     </a> 
    </div>    
</body> 
</html> 

ときテキスト(例: 'ゲーム')に値を書き込み、

ボタン(search-movie.html内)をクリックすると、結果が表示されます(例:imdb 、タイトルなど)を

result-movie.htmlに変更します。私はui-routerを使用していましたが、result-movie.htmlに値を表示できませんでした。私は検索ページに値を表示することができますが、私はこれを望んでいません。

1は別のを呼び出すか、どのように私は.factory使用( 'servicethingss ..')することができCANコントローラ

答えて

1

保存結果をとhtml内の別のcontroller

ワーキングFIDDLE

app.controller('searchMovieController', function ($scope, $http, resultFactory) { 
     $scope.searchMovieF = function() { 
      if ($scope.searchMovie.length > 0) { 
       $scope.api = 'http://www.omdbapi.com/?t=' + $scope.searchMovie + '&y=&plot=short&r=json'; 
       $http.get($scope.api) 
       .success(function (data) { 
        $("#movie-name").autocomplete({ 
         source: data.Title 
        }); 
        if ((data.Error != "Movie not found!") && (data.Error != "Must provide more than one character.")) { 
         var details = { 
          name:data.Title, 
          release: data.Released, 
          length: data.Runtime, 
          description: data.Plot, 
          rating: data.imdbRating 
         } 
         resultFactory.set(details) 

        } 
        else { 
         alert("Movie not found !") 
        } 
       }); 
      } else { 
       alert("Please write somethings !") 
      } 
     } 
    }); 
    app.controller('resultMovieController', function ($scope,resultFactory) { 
     $scope.result = function() { 
      return resultFactory.details 
     } 
    }); 


    app.factory('resultFactory', function() { 
     var details; 
     var set = function(obj) { 
      detail = obj 
     } 
     return { 
      details: details, 
      set: set 
     } 
    }) 
+0

何もショー内で使用しますページ? @Arif – eagle

+0

@eagle、あなたのresulthtmlページも '{{name}}'の代わりに変更してください。 あなたの問題を示すjsfiddleを教えてください。 – Arif

+0

私は、 JSFiddleを追加しました。どうすれば動作するか確認してください。 – Arif

関連する問題