首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接父$scope、指令$scope和模态$scope?

如何连接父$scope、指令$scope和模态$scope?
EN

Stack Overflow用户
提问于 2013-07-31 15:13:29
回答 1查看 363关注 0票数 0

我试图为标签选择器创建一个指令。

代码语言:javascript
复制
<label-selector label="label1">label1</label-selector>

label1是应该选择的默认标签,此值来自控制器中存在标签选择器的视图中的$scope。

我想要的行为如下,当用户单击label1时,应该打开一个模式。该模式列出了一个标签集合(集合应该从某些数组加载)。集合中的label1应标记为selected,例如class="selected“。

当我单击另一个标签时,例如, label2 ,label2应该被选中,模式应该关闭。此事件还将更新标签选择器。

代码语言:javascript
复制
<label-selector label="label2">label2</label-selector>

我想将标签选择器元素和模态封装在同一个指令中。

这个是可能的吗?

更新

我在这里做了一个小例子。

代码语言:javascript
复制
 <div ng-app="app" id="app">
    <div ng-controller="MainCtrl">
        <label-select color="{{color}}"></label-select>
    </div>
</div>

CSS

代码语言:javascript
复制
.flyout {
    position: absolute;
    top: 0px;
    right: 0px;
    z-index: 31101;
    background-color: lightgray;
    bottom: 0px;
    box-shadow: -4px 0 4px rgba(0, 0, 0, 0.2);
    overflow-y: auto;
    width: 500px;
    -webkit-transform: translate(100%, 0%);    
    -webkit-transition: all 0.2s ease-in-out;
}
.flyout.show{
    -webkit-transform: translate(0%, 0%);    
}

JS

代码语言:javascript
复制
var app = angular.module('app', []);

app.controller('MainCtrl', function ($scope) {
    $scope.color = "#cecece";
});

app.directive('labelSelect', function ($parse, $location) {
    return {
        restrict: 'E',
        scope: {
            color: '@color'
        },
        template:
        '<a ng-click="selectColor()" style="color: {{color}}" class="label-color icon-bookmark">{{color}}</a><div class="flyout"></div>',
        link: function (scope, lElement, attrs) {
            scope.selectColor = function () {
                angular.element(".flyout").addClass("show");
            };            

        }
    }
});

http://jsfiddle.net/FrejNorling/bNumc/4/

我试图创建的行为是,我希望使用一个标签列表(ul list)填充 div,并且当我在列表中选择一个标签时,MainCtrl中的$scope.color应该被更新,而飞出应该被删除/关闭。

EN

回答 1

Stack Overflow用户

发布于 2013-07-31 18:24:04

正如我在注释中所说的,您可以访问模式弹出作用域中父作用域中的变量。

代码语言:javascript
复制
<div ng-app="app" id="app">
    <div ng-controller="MainCtrl">
        <label-select color="{{color}}"></label-select>
        <div class="flyout">
            <ul>
                <li ng-click="setColor(color)" ng-repeat="color in colors">{{color}}</li>
            </ul>
        </div>
    </div>
</div>

JS

代码语言:javascript
复制
var app = angular.module('app', []);

app.controller('MainCtrl', function ($scope) {
    $scope.color = "#AAADDD";
    $scope.colors = ["#AAA", "#BBB", "#CCC", "#DDD", "#EEE"];
    $scope.setColor = function (color) {
        angular.element(".flyout").removeClass("show");
        $scope.color = color;
    }

});

app.directive('labelSelect', function ($parse, $location) {
    return {
        restrict: 'E',
        scope: {
            color: '@color'
        },
        template:
            '<a ng-click="selectColor()" ng-showstyle="color: {{color}}" class="label-color icon-bookmark">{{color}}</a>',
        link: function (scope, lElement, attrs) {
            scope.selectColor = function () {
                angular.element(".flyout").addClass("show");
            };
        }
    }
});

JSFIDDLE演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17974236

复制
相关文章

相似问题

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