首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在视图中工作的方法在控制器中不工作。

在视图中工作的方法在控制器中不工作。
EN

Stack Overflow用户
提问于 2015-02-28 14:23:01
回答 3查看 95关注 0票数 0

我有下面的看法。

代码语言:javascript
复制
Moves: <strong>{{puzzle.api.moves}}</strong>

<button class="button" ng-click="puzzle.api.shuffle()">Shuffle</button>

<sliding-puzzle api="puzzle.api" size="{{cols}}x{{puzzles.cols}}" src="{{src}}"></sliding-puzzle>

在上面的视图中,方法霉运()在ng单击事件按钮上工作得很好。

代码语言:javascript
复制
puzzle.api.shuffle()

但是当我在控制器里用它的时候,它就不起作用了。我知道控制器无法使用这个难题,因为它来自自定义指令。

如何在我的控制器内使用这个函数?

下面是我的完全控制器。

代码语言:javascript
复制
app.controller('HomeCtrl', function($scope, slidingPuzzle) {

    $scope.showOptions = function() {
       puzzle.api.shuffle(); //puzzle is not defined
       $scope.puzzle.api.shuffle(); //puzzle is undefined
    }

});

我正在使用下面给定的自定义指令。

https://github.com/pdanis/angular-puzzle/blob/master/app/js/puzzle/slidingPuzzle.js

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-02 16:41:15

虽然@logan的回答对我来说很好,也很符合逻辑,但它不起作用。作为一种临时解决方案,我已经按照下面的方式编写了代码,并且它可以工作。

我知道这不是一个优雅的解决方案,但它对我有效,至少现在是这样。

当它在视图中工作时,我将这些值传递给控制器。

代码语言:javascript
复制
<button ng-click="shuffle(puzzle.api)">shuffle</button>

在控制器中,我正在使用它。

代码语言:javascript
复制
$scope.showOptions = function(api) {
   api.shuffle(); 
}
票数 0
EN

Stack Overflow用户

发布于 2015-02-28 16:21:41

该指令依赖于您通过api属性为它提供一个变量,该变量将通过双向绑定填充。这不是通常在指令中看到的东西。

如果视图中的指令用法如下所示:

代码语言:javascript
复制
<sliding-puzzle api="puzzle" size="{{rows}}x{{cols}}" src="{{src}}"></sliding-puzzle>

控制器设置rowscols

代码语言:javascript
复制
$scope.rows = 3;
$scope.cols = 4;

然后,$scope.puzzle将在您使用$scope.showOptions()时填充。

代码语言:javascript
复制
$scope.showOptions = function() {
  $scope.puzzle.shuffle();
};

Plnkr证明了这一点。请参阅控制台以获得输出。

票数 2
EN

Stack Overflow用户

发布于 2015-02-28 14:24:45

在控制器中使用$scope.puzzle.api.shuffle()。查看角形拼图上的示例

您需要在控制器中定义谜题。在示例中,$scope.puzzles的定义如下:

代码语言:javascript
复制
 app.controller('slidingAdvancedCtrl', function($scope) {
        $scope.puzzles = [
            { src: './img/misko.jpg', title: 'Miško Hevery', rows: 4, cols: 4 },
            { src: './img/igor.jpg', title: 'Igor Minár', rows: 3, cols: 3 },
            { src: './img/vojta.jpg', title: 'Vojta Jína', rows: 4, cols: 3 }
        ];
    });

正如您在示例项目中所看到的,益智是for循环中的一个谜题元素。

代码语言:javascript
复制
<fieldset id="sliding-advanced" ng-controller="slidingAdvancedCtrl">
        <legend>Advanced</legend>
        <div ng-repeat="puzzle in puzzles">
            <h2>{{puzzle.title}}</h2>
            <div class="src">
                <input type="text" ng-model="puzzle.src"/>
            </div>
            <div class="status">
                moves: <strong>{{puzzle.api.moves}}</strong><br/>
                solved: <strong>{{puzzle.api.isSolved()}}</strong>
            </div>
            <div class="size">
                rows: <input type="text" ng-model="puzzle.rows" size="2"/>
                cols: <input type="text" ng-model="puzzle.cols" size="2"/><br/>
                <button ng-click="puzzle.api.shuffle()">shuffle</button>
                <button ng-click="puzzle.api.solve()">solve</button>
            </div>
            <sliding-puzzle api="puzzle.api" size="{{puzzle.rows}}x{{puzzle.cols}}" src="{{puzzle.src}}"></sliding-puzzle>
        </div>
    </fieldset>

所以你可以在你的控制器里做

代码语言:javascript
复制
 $scope.puzzles[0].shuffle();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28782769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档